0

有代码:

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被破坏?

4

2 回答 2

2

正如Python 教程所说:

只要它出现在类的定义中,就无需考虑标识符的句法位置,就可以完成这种修饰。

class对于在语句中的词法上的代码,名称修改发生在编译时。class语句之外的代码不会发生这种情况。class对于在语句外部定义然后添加到类对象的函数中的代码,不会发生这种情况。由语句中的execoreval调用动态执行的代码不会发生这种情况。class

于 2013-05-25T12:45:18.457 回答
0

正是因为您在类外部声明了它,并且名称修改发生在类内部。

于 2013-05-25T12:44:57.660 回答