这里有一个纯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程序,你会使用哪种方法,为什么?
简短的答案是。财产胜过一切。总是这样。
有时需要使用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)
这里有一篇简短的文章,介绍了Python中getters和setters的主题。