ΕΝΟΤΗΤΑ 29 - Property Decorator

Στο σημερινό δωρεάν μάθημα Python θα ορίσουμε τι είναι το property και πως χρησιμοποιούμε το property decorator για να ορίσουμε ένα property σε μια μέθοδο και σαν αποτέλεσμα να εκτελέσουμε την μέθοδο σαν property. Αν και οι έννοιες αυτές είναι πολύ σημαντικές στην ανάπτυξη object-oriented προγραμμάτων στην Python, πολλές φορές δυσκολεύουν τους αρχάριους να τις κατανοήσουν και να τις χρησιμοποιήσουν σωστά.
Τι είναι λοιπόν ένα property decorator? Ορίζεται με παρόμοιο τρόπο όπως κάναμε και στις static methods και στις class methods. Όταν οριστεί, μας επιτρέπει να καλέσουμε μια μέθοδο σαν attribute δηλαδή χωρίς να χρησιμοποιήσουμε τις παρενθέσεις.
Θα χρησιμοποιήσουμε για άλλη μια φορά το παράδειγμα του εργαζόμενου δημιουργώντας μια κλάση με το όνομα Employee και προσθέτοντας την __init__ μέθοδο όπως και μια μέθοδο με το όνομα SalaryCalculation. Θα υπολογίσουμε τον μισθό που πρέπει να πληρωθεί ο εργάτης με βάση τις ώρες που δούλεψε. Ας δούμε πρώτα, πως θα γράφαμε αυτό τον κώδικα χωρίς να χρησιμοποιήσουμε propery decorators.
App.py
class Employee(): def __init__(self, first, last, salary, hours): self.first = first self.last = last self.salary = salary self.hours = hours def SalaryCalculation(self): print(self.salary * self.hours) michail = Employee("Michail", "Kassapoglou", 20, 40) michail.SalaryCalculation()
Output
800
Τώρα ας χρησιμοποιήσουμε το property decorator στην μέθοδο SalaryCalculation. Το πρόγραμμα μας θα αλλάξει ο εξής:
App.py
class Employee(): def __init__(self, first, last, salary, hours): self.first = first self.last = last self.salary = salary self.hours = hours @property def SalaryCalculation(self): print(self.salary * self.hours) michail = Employee("Michail", "Kassapoglou", 20, 40) michail.SalaryCalculation
Output
800
Ας δημιουργήσουμε μια ακόμα μέθοδο, στην κλάση Employee, με το όνομα FullName και ας εφαρμόσουμε το property decorator σε αυτήν.
App.py
class Employee(): def __init__(self, first, last, salary, hours): self.first = first self.last = last self.salary = salary self.hours = hours @property def SalaryCalculation(self): print(self.salary * self.hours) @property def FullName(self): print(f'First Name = {self.first} and Last Name = {self.last}') michail = Employee("Michail", "Kassapoglou", 20, 40) michail.FullName michail.SalaryCalculation
Output
First Name = Michail and Last Name = Kassapoglou 800
Αν και νομίζω ότι ήδη έχετε αναγνωρίσει την ευκολία με την οποία μπορείτε να καλέσετε τις μεθόδους σας μέσω του property decorator, υπάρχει όμως ένα πρόβλημα – δεν μπορείτε να αναθέσετε τιμή στον property decorator. Στο παραπάνω παράδειγμα, μπορείτε να αναθέσετε ένα καινούργιο όνομα στο attribute name γράφοντας michail.name. Ίσως σκεφτείτε λοιπόν ότι αφού μπορείτε να καλέσετε μια μέθοδο με τον ίδιο τρόπο όπως καλούμε ένα attribute τότε θα μπορείτε να γράψετε και michail.FullName = “Michail Kassapoglou”. Με τον τρόπο που έχουμε γράψει το πρόγραμμα μας δεν υποστηρίζεται αυτή η δυνατότητα. Αν προσπαθήσετε να αναθέσετε κάποια τιμή στο FullName θα λάβετε πίσω μήνυμα λάθους από την Python. Υπάρχει όμως τρόπος να το καταφέρουμε αυτό? Ναι υπάρχει και ονομάζεται setter method.
App.py
class Employee(): def __init__(self, first, last, salary, hours): self.first = first self.last = last self.salary = salary self.hours = hours @property def SalaryCalculation(self): print(self.salary * self.hours) @property def FullName(self): print(f'First Name = {self.first} and Last Name = {self.last}') @FullName.setter def FullName(self, full): first, last = full.split(' ') self.first = first self.last = last michail = Employee("Michail", "Kassapoglou", 20, 40) michail.FullName michail.FullName = 'John Doe' michail.FullName
Output
First Name = Michail and Last Name = Kassapoglou First Name = John and Last Name = Doe
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.