Ακολουθεί μια καθαρά ειδική για την Python ερώτηση σχεδιασμού:
class MyClass(object):
...
def get_my_attr(self):
...
def set_my_attr(self, value):
...
και
class MyClass(object):
...
@property
def my_attr(self):
...
@my_attr.setter
def my_attr(self, value):
...
Η Python μας επιτρέπει να το κάνουμε με οποιονδήποτε τρόπο. Αν σχεδιάζατε ένα πρόγραμμα Python, ποια προσέγγιση θα χρησιμοποιούσατε και γιατί;
Η χρήση των ιδιοτήτων σας επιτρέπει να ξεκινήσετε με κανονικές προσπελάσεις χαρακτηριστικών και στη συνέχεια να τις υποστηρίξετε με αποκτητές και ρυθμιστές στη συνέχεια, ανάλογα με τις ανάγκες/a>.
Η σύντομη απάντηση είναι: οι ιδιότητες κερδίζουν τα χέρια κάτω. Πάντα.
Μερικές φορές υπάρχει ανάγκη για getters και setters, αλλά ακόμα και τότε, θα τους "έκρυβα" στον έξω κόσμο. Υπάρχουν πολλοί τρόποι για να το κάνετε αυτό στην Python (getattr
, setattr
, __getattribute__
, κλπ..., αλλά ένας πολύ συνοπτικός και καθαρός είναι:
def set_email(self, value):
if '@' not in value:
raise Exception("This doesn't look like an email address.")
self._email = value
def get_email(self):
return self._email
email = property(get_email, set_email)
Εδώ'είναι ένα σύντομο άρθρο που εισάγει το θέμα των getters και setters στην Python.
Η χρήση ιδιοτήτων είναι για μένα πιο διαισθητική και ταιριάζει καλύτερα στον περισσότερο κώδικα.
Σύγκριση
o.x = 5
ox = o.x
vs.
o.setX(5)
ox = o.getX()
είναι για μένα προφανές ποιο είναι ευκολότερο να διαβαστεί. Επίσης οι ιδιότητες επιτρέπουν τις ιδιωτικές μεταβλητές πολύ πιο εύκολα.