关于python @property的设计问题,我遇到了这两个选项:
选项1:
class ThisIsMyClass(object):
@property
def ClassAttr(self):
...
@ClassAttr.setter
def ClassAttr(self, value):
...
Run Code Online (Sandbox Code Playgroud)
选项2:
class ThisIsMyClass(object):
def set_ClassAttr(self, value):
...
def get_ClassAttr(self):
...
myProperty = property(get_ClassAttr, set_ClassAttr)
Run Code Online (Sandbox Code Playgroud)
题:
我想知道使用这两个选项是否有任何区别?
如果是这样,它如何影响我的代码?
它们完全相同.请参阅文档以了解自己:
http://docs.python.org/2/library/functions.html#property
@选项在我看来更具可读性(代码在两个连续的行中),更容易重构(grep用于所有@修饰符并继续),并且更容易记住.这意味着第二种方法的语法糖,我建议坚持它.
如果由于任何原因你需要支持不支持@功能的Python版本(2.6),那么你需要坚持使用属性(第二个选项)方法.
在一个不相关的注释:我建议您保持使用由下划线分隔的小写单词命名的成员属性.当然,这是一个偏好问题,但与Python风格推荐(PEP8)保持一致.这个建议有一些重要的例外,但是,如果你可以提供帮助,请留下大写字母.