为什么 python 会在这里损坏

pau*_*are 5 python variables module class double-underscore

如果没有 cls.txt,为什么这段代码会失败?在 __TEXT 之前

__TEXT = "abcde"

print(__TEXT)
class aaa():
    @classmethod
    def bbb(cls):
        print(__TEXT)

aaa.bbb()
Run Code Online (Sandbox Code Playgroud)

输出是:

abcde
Traceback (most recent call last):
  File "<string>", line 9, in <module>
  File "<string>", line 7, in bbb
NameError: name '_aaa__TEXT' is not defined
Run Code Online (Sandbox Code Playgroud)

如果将 __TEXT 设为类变量并尝试在不使用类前缀的情况下引用它,如下所示:

class aaa():
    __TEXT = "abcde"
    @classmethod
    def bbb(cls):
        print(cls.__TEXT)
        print(__TEXT)

x = aaa()
x.bbb()
Run Code Online (Sandbox Code Playgroud)

你会得到同样的错误,但它没有意义:

abcde
Traceback (most recent call last):
  File "<string>", line 10, in <module>
  File "<string>", line 7, in bbb
NameError: name '_aaa__TEXT' is not defined
Run Code Online (Sandbox Code Playgroud)

Kra*_*las 1

PEP 8中,他们特别指出:

__double_leading_underscore:命名类属性时,调用名称修改(在类 FooBar 中,__boo 变为 _FooBar__boo ...)。

请注意以粗体显示的选择。在他们提请注意重整在命名类属性中的使用的完全相同的句子中,他们指出重整发生在类的任何内部,这完美地解释了您所观察到的内容。 __boo