在变量nam中不使用前导下划线访问类属性

2024-05-14 13:18:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道变量名中的单个前导下划线对解释器没有任何意义(使用*导入时除外),因此我对在试图理解其他人的代码时遇到的以下问题感到非常困惑:

我有一个名为配置的类和一个名为接口的类

配置有一个名为\u chooser的属性(带有一个前导下划线),该属性通常包含另一个对象

class Configuration(object):
    def __init__(self):
         self._chooser = AnotherObj()

通过一些其他函数,将配置的实例(我们称之为配置对象)提供给接口的新实例(我们称之为接口对象ConfigObj也存储为新的InterfaceObj对象的属性

class Interface(object)
    def __init__(self, config):
        self.config = config

    def aFunction(self)
        print(self.config.chooser)


def someOtherFunction()
    ConfigObj = Configuration()
    InterfaceObj = Interface(ConfigObj)

现在,InterfaceObj的函数访问变量self.config.chooser(不带下划线!),即使很难,我也从未定义过。 变量选择器也不会显示在自动完成中(\u chooser显示),也不会显示使用

dir(self.config)

vars(self.config)

(在函数中的self.config.chooser的可疑调用之前调用了这两个函数)

请记住,上面的代码片段是整个实际代码的简化版本。我查看了所有内容,但无法找出没有下划线的变量来自何处,或者为什么它不可见。 我也无法在单独的环境中复制它,我自己定义的任何其他变量都必须用下划线调用,否则它们只返回None

这里会有什么魔法? 非常感谢你的帮助


Tags: 对象函数代码selfconfig属性objectinit

热门问题