【发布时间】:2019-06-23 19:09:26
【问题描述】:
考虑下面的类
class Foo(object):
@staticmethod
def __is():
print('__is')
def m(self):
Foo.__is() # executes
Foo.__is() # fails because of mangling
print(Foo.__dict__.keys())
Foo.__is() 在定义类后运行时,由于名称错误而失败。 python解释器如何在方法内部解析Foo.__is()而不在类外部解析?
【问题讨论】:
-
@BernhardVallant 不是重复的 - op 清楚地知道名称修改机制,问题是“这是如何实现的”。
-
请注意,您的前两个类语句会引发错误,因为 Foo 尚未定义。在它们工作的方法内部使用,因为方法主体在调用之前不会执行。到那时这个类已经定义好了。
标签: python cpython python-internals private-methods