Python 在静态函数内添加类属性和在类外赋值之间的区别

Python 在静态函数内添加类属性和在类外赋值之间的区别,python,Python,代码如下: 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 为什么名称\uuu m没有被损坏成\u A\uu m,而\uu z是?正是因为您在类外声明了它,而名称损坏发生在类内。正如 只要标识符出现在类的定义中,

代码如下:

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

为什么名称
\uuu m
没有被损坏成
\u A\uu m
,而
\uu z
是?

正是因为您在类外声明了它,而名称损坏发生在类内。

正如

只要标识符出现在类的定义中,就可以在不考虑标识符的语法位置的情况下进行修改

在编译时,在
语句内部的代码会发生名称损坏。对于
语句之外的代码,不会出现这种情况。对于在
语句外部定义然后添加到类对象的函数中的代码,不会出现这种情况。由
exec
eval
调用在
class
语句中动态执行的代码不会出现这种情况