gpt4 book ai didi

Python 名称用 __ 修饰全局变量

转载 作者:行者123 更新时间:2023-11-30 22:46:24 26 4
gpt4 key购买 nike

当我使用 __ 创建模块级变量时并尝试在类的方法内访问它(使用 global 关键字),发生名称修改。

让我举个例子:

__test = 'asd'  # module level variable with __


class TestClass(object):
def test(self):
global __test
print(__test) # trying to access this variable


a = TestClass()
a.test()

解释器出现错误:

NameError: name '_TestClass__test' is not defined

正如我们所看到的,它试图命名 __test进入_TestClass__test .

我认为名称修饰应该仅用于类变量(当我使用 self 或类名访问它们时)。

这是我没有意识到的明确定义的行为还是某种 Python 错误?

我在 CPython 3.5 上测试了它

最佳答案

Any identifier of the form __spam (at least two leading underscores, at most one trailing underscore) is textually replaced with _classname__spam, where classname is the current class name with leading underscore(s) stripped. This mangling is done without regard to the syntactic position of the identifier, as long as it occurs within the definition of a class.

(来自 the Python documentation ,强调我的)

关于Python 名称用 __ 修饰全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40883083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com