Η κατασκευή ιδιότητας () επιστρέφει το χαρακτηριστικό ιδιότητας.
Η σύνταξη του property()
είναι:
ιδιότητα (fget = Κανένα, fset = Κανένα, fdel = Κανένα, έγγραφο = Κανένα)
Συνιστώμενη ανάγνωση: Python @property: Πώς να το χρησιμοποιήσετε και γιατί;
ιδιότητα () Παράμετροι
Η property()
διαρκεί τέσσερις προαιρετικές παραμέτρους:
- fget (προαιρετικό) - Λειτουργία για τη λήψη της τιμής χαρακτηριστικού. Προεπιλογές
None
. - fset (προαιρετικό) - Λειτουργία για τον καθορισμό της τιμής χαρακτηριστικού. Προεπιλογές
None
. - fdel (προαιρετικό) - Λειτουργία για τη διαγραφή της τιμής χαρακτηριστικού. Προεπιλογές
None
. - doc (προαιρετικό) - Μια συμβολοσειρά που περιέχει την τεκμηρίωση (docstring) για το χαρακτηριστικό. Προεπιλογές
None
.
Επιστροφή αξία από την ιδιότητα ()
property()
επιστρέφει το χαρακτηριστικό ιδιοκτησίας από τον δεδομένο λήπτη, ρυθμιστή και διαγραφή.
- Εάν δεν δοθούν ορίσματα,
property()
επιστρέφει ένα χαρακτηριστικό ιδιότητας βάσης που δεν περιέχει κανένα getter, setter ή deleter. - Εάν το έγγραφο δεν παρέχεται,
property()
λαμβάνει το docstring της συνάρτησης getter.
Παράδειγμα 1: Δημιουργήστε ένα χαρακτηριστικό με το getter, setter και deleter
class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name
Παραγωγή
Λήψη ονόματος Το όνομα είναι: Adam Ρύθμιση ονόματος σε John Διαγραφή ονόματος
Εδώ, το _name χρησιμοποιείται ως ιδιωτική μεταβλητή για την αποθήκευση του ονόματος του ατόμου.
Ορίσαμε επίσης:
- μια μέθοδο
get_name()
λήψης για να πάρει το όνομα του ατόμου, - μια μέθοδο
set_name()
ρύθμισης για να ορίσετε το όνομα του ατόμου, - μια μέθοδο
del_name()
διαγραφής για να διαγράψετε το όνομα του ατόμου.
Τώρα, ορίζουμε ένα νέο όνομα χαρακτηριστικού ιδιοκτησίας καλώντας τη property()
μέθοδο.
Όπως φαίνεται στο πρόγραμμα, οι p.name
εσωτερικές κλήσεις αναφέρονται get_name()
ως λήπτες, set_name()
ως ρυθμιστές και del_name()
διαγράφονται μέσω της εκτυπωμένης εξόδου που υπάρχει μέσα στις μεθόδους.
Παράδειγμα 2: Χρήση του διακοσμητή @property
Αντί να το χρησιμοποιήσετε property()
, μπορείτε να χρησιμοποιήσετε το Python διακοσμητή @property
για να αντιστοιχίσετε το getter, setter και deleter.
class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name
Παραγωγή
Λήψη ονόματος Το όνομα είναι: Adam Ρύθμιση ονόματος σε John Διαγραφή ονόματος
Εδώ, αντί να το χρησιμοποιήσουμε property()
, χρησιμοποιήσαμε τον @property
διακοσμητή.
Κατ 'αρχάς, καθορίζουμε ότι η name()
μέθοδος είναι επίσης ένα χαρακτηριστικό του Person. Αυτό γίνεται χρησιμοποιώντας @property
πριν από τη μέθοδο λήψης, όπως φαίνεται στο πρόγραμμα.
Στη συνέχεια, χρησιμοποιούμε το όνομα του χαρακτηριστικού για να καθορίσουμε το ρυθμιστή και τον διαγραφέα.
Αυτό γίνεται χρησιμοποιώντας @name.setter
τη μέθοδο ρύθμισης και @name.deleter
τη μέθοδο διαγραφής.
Σημειώστε, χρησιμοποιήσαμε την ίδια μέθοδο name()
με διαφορετικούς ορισμούς για τον ορισμό του λήπτη, του ρυθμιστή και του διαγράφοντος.
Τώρα, όποτε χρησιμοποιούμε p.name
, καλεί εσωτερικά τον κατάλληλο δέκτη, ρυθμιστή και διαγραφή όπως φαίνεται από την εκτυπωμένη έξοδο που υπάρχει μέσα στη μέθοδο.