Python变量名称__和_和@property语法与声明位置

时间:2016-01-28 14:49:03

标签: python python-2.7 python-3.x

我在这里有点困惑。

  1. 我们应该何时以及如何使用以单个下划线_和双下划线__开头的变量名称。

  2. 何时应使用@property标记

  3. 什么时候应该在init方法之外声明变量?什么时候应该在它们内部声明变量?

  4. 下面是一个代码示例,用于显示示例用法(可能使用不当)。

    class GenClass(object):
        _variable1 = None
        __variable2 = None
    
        @property
        variable3 = None
    
        def __init__(self, v4):
            self.variable4 = v4
    

    所有这些之间有什么区别?它们看起来是隐含的,肉眼可以看作是相同的,但我已经开始注意到它们都是不同的。

1 个答案:

答案 0 :(得分:4)

    变量/属性名称开头的
  1. ___表示该属性应该是" protected"或者"私人"分别不应该被同一类/模块之外的代码触及。 __触发一些实际的轻名称修改以真正防止与继承类的名称冲突,但最终两者都只是提示程序员的预期用法。请勿触摸_变量,如果它不是"您的",因为作者不保证此属性将始终存在和/或始终有用。

  2. 当您想要在访问属性时执行方法(而不是直接访问普通属性)时,应使用
  3. @property。这有几个用途,包括计算/虚拟属性(读取属性时计算的值)和强制只读属性:

    @property
    def foo(self):
        '''Can read, but can't write to .foo'''
        return 'bar'
    
  4. 在类上声明属性可使该属性在所有类的实例中相同。在self上声明它使该特定于该实例。 通常你想要后者。