我在这里有点困惑。
我们应该何时以及如何使用以单个下划线_
和双下划线__
开头的变量名称。
何时应使用@property
标记
什么时候应该在init方法之外声明变量?什么时候应该在它们内部声明变量?
下面是一个代码示例,用于显示示例用法(可能使用不当)。
class GenClass(object):
_variable1 = None
__variable2 = None
@property
variable3 = None
def __init__(self, v4):
self.variable4 = v4
所有这些之间有什么区别?它们看起来是隐含的,肉眼可以看作是相同的,但我已经开始注意到它们都是不同的。
答案 0 :(得分:4)
_
和__
表示该属性应该是" protected"或者"私人"分别不应该被同一类/模块之外的代码触及。 __
触发一些实际的轻名称修改以真正防止与继承类的名称冲突,但最终两者都只是提示程序员的预期用法。请勿触摸_
变量,如果它不是"您的",因为作者不保证此属性将始终存在和/或始终有用。
@property
。这有几个用途,包括计算/虚拟属性(读取属性时计算的值)和强制只读属性:
@property
def foo(self):
'''Can read, but can't write to .foo'''
return 'bar'
在类上声明属性可使该属性在所有类的实例中相同。在self
上声明它使该特定于该实例。 通常你想要后者。