在静态函数内添加类属性与在类外进行赋值之间的区别

有代码:


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呢?


动漫人物
浏览 219回答 2
2回答

ABOUTYOU

如Python教程所述:只要不存在标识符的语法位置,就可以进行这种改写,只要它出现在类的定义内即可。名称修饰发生在编译时,该class语句在语句内按词法显示。class语句外的代码不会发生这种情况。对于在class语句外部定义然后添加到类对象的函数中的代码,这种情况不会发生。对于由exec或语句eval内部调用动态执行的代码,这种情况不会发生class。

12345678_0001

正是因为您在类外声明了它,并且名称修饰发生在类内。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python