代码如下:
class A:
@staticmethod
def g():
A.__z = 4
print(dir(A))
A.g()
print(dir(A)) # A has attribute _A__z
A.__m = 5
print(dir(A)) # A has attribute _A__z and __m
为什么__m
这个名字没有变成_A__m
而__z
却变成了呢?
发布于 2013-05-25 12:45:18
正如Python tutorial所说:
只要它发生在类的定义中,就可以在不考虑标识符的语法位置的情况下进行这种损坏。
对于在词法上位于class
语句内的代码,在编译时会发生名称损坏。在class
语句之外的代码中不会发生这种情况。对于在class
语句外部定义然后添加到类对象中的函数中的代码,不会出现这种情况。对于由class
语句中的exec
或eval
调用动态执行的代码,不会出现这种情况。
发布于 2013-05-25 12:44:58
这正是因为您在类外部声明了它,而名称损坏发生在类内部。
https://stackoverflow.com/questions/16749659
复制