不是类变量的Python私有类变量
当试图从类中访问__variables
,解析器假定2个下划线相对于当前类是私有的。 注意一个不相关的函数如何得到一个“私有”变量。
这是一个错误?
>>> def f(): pass ... >>> class A: ... def g(self): ... f.__x = 1 ... def h(): ... pass ... h.__y = 2 ... return h ... >>> z = A().g() >>> dir(z) ['_A__y', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get_ _', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new __', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_ closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name'] >>> dir(f) ['_A__x', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get_ _', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new __', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_ closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
在Python 2.5和3.2上测试
这是一个有据可查的行为。
只要它在类的定义内发生,就不会考虑标识符的语法位置。
链接地址: http://www.djcxy.com/p/78565.html上一篇: Python private class variables that aren't class variables