Python

ΕΝΟΤΗΤΑ 29 - Property Decorator

image description

Στο σημερινό δωρεάν μάθημα 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
		
	 

ΕΙΣΗΓΗΤΗΣ

Merry Jhonson

Μιχάλης Κασάπογλου

Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.

loader