为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

动漫人物 2021-03-05 21:18:20
有代码:class A:    @staticmethod  def g():    A.__z = 4print(dir(A))A.g()print(dir(A)) # A has attribute _A__zA.__m = 5print(dir(A)) # A has attribute _A__z and __m为什么名称__m不被改成_A__m而是__z呢?
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

如Python教程所述:

只要不存在标识符的语法位置,就可以进行这种改写,只要它出现在类的定义内即可。

名称修饰发生在编译时,该class语句在语句内按词法显示。class语句外的代码不会发生这种情况。对于在class语句外部定义然后添加到类对象的函数中的代码,这种情况不会发生。对于由exec或语句eval内部调用动态执行的代码,这种情况不会发生class


查看完整回答
反对 回复 2021-03-26
?
12345678_0001

TA贡献1802条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-03-26
  • 2 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信