Čia pateikiamas su "Python" susijęs dizaino klausimas:
class MyClass(object):
...
def get_my_attr(self):
...
def set_my_attr(self, value):
...
ir
class MyClass(object):
...
@property
def my_attr(self):
...
@my_attr.setter
def my_attr(self, value):
...
Python leidžia mums tai padaryti bet kuriuo būdu. Jei kurtumėte "Python" programą, kurį metodą naudotumėte ir kodėl?
Naudodami savybes galite pradėti nuo įprastos prieigos prie atributų, o vėliau, jei reikia, paremti juos getteriais ir setteriais.
Trumpas atsakymas: Atsakymas: savybės laimi rankomis. Visada.
Kartais prireikia getterių ir setterių, bet net ir tada juos paslėpčiau išoriniam pasauliui. Pythone yra daugybė būdų tai padaryti (getattr
, setattr
, __getattribute__
ir t. t.), bet labai glaustas ir švarus būdas yra toks:
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)
Čia pateikiamas trumpas straipsnis, kuriame supažindinama su getteriais ir setteriais "Python" programoje.
Man atrodo, kad savybių naudojimas yra intuityvesnis ir geriau tinka daugumai kodų.
Palyginimas
o.x = 5
ox = o.x
vs.
o.setX(5)
ox = o.getX()
man yra visiškai akivaizdu, kurį lengviau skaityti. Be to, savybės leidžia daug lengviau naudoti privačius kintamuosius.