有代码: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
。
添加回答
举报
0/150
提交
取消