Python @property设计

Kob*_*i K 5 python properties

关于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)

题:

我想知道使用这两个选项是否有任何区别?

如果是这样,它如何影响我的代码?

Esc*_*alo 5

它们完全相同.请参阅文档以了解自己:

http://docs.python.org/2/library/functions.html#property

@选项在我看来更具可读性(代码在两个连续的行中),更容易重构(grep用于所有@修饰符并继续),并且更容易记住.这意味着第二种方法的语法糖,我建议坚持它.

如果由于任何原因你需要支持不支持@功能的Python版本(2.6),那么你需要坚持使用属性(第二个选项)方法.

在一个不相关的注释:我建议您保持使用由下划线分隔的小写单词命名的成员属性.当然,这是一个偏好问题,但与Python风格推荐(PEP8)保持一致.这个建议有一些重要的例外,但是,如果你可以提供帮助,请留下大写字母.