编辑:目前的两个答案都谈到了类内部存在混乱的事实。我的问题是关于类方法中的值-请注意,方法作用域中的解析不同于类作用域,否则__CLASS
将是可打印的。
在Python2.7和3.6中似乎就是这种情况。
例如,下面的代码
__GLOBAL = 'global'
_Bar__MANGLED_GLOBAL = 'mangled global'
class Bar(object):
__CLASS = 'class'
def baz(self):
__LOCAL = 'local'
try:
print __LOCAL
except Exception as e:
print e
try:
print __CLASS
except Exception as e:
print e
try:
print __GLOBAL
except Exception as e:
print e
try:
print __MANGLED_GLOBAL
except Exception as e:
print e
Bar().baz()
将会给予
local
global name '_Bar__CLASS' is not defined
global name '_Bar__GLOBAL' is not defined
mangled global
我理解当有一个other.__x
,或者需要一个类级__foo
来等同于self.__foo
时的逻辑,但这似乎是一个疏忽,类范围内的任何东西都会被自动重写。
https://stackoverflow.com/questions/56695329
复制相似问题