Ακίνητο Python ()

Η κατασκευή ιδιότητας () επιστρέφει το χαρακτηριστικό ιδιότητας.

Η σύνταξη του 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, καλεί εσωτερικά τον κατάλληλο δέκτη, ρυθμιστή και διαγραφή όπως φαίνεται από την εκτυπωμένη έξοδο που υπάρχει μέσα στη μέθοδο.

ενδιαφέροντα άρθρα...