访问类属性时,变量名前无下划线

时间:2019-11-12 18:29:34

标签: python python-3.x class inheritance

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

我有一个名为 Configuration 的类和一个名为 Interface 的类。

配置具有一个名为 _chooser 的属性(带有一个下划线),该属性通常包含另一个对象。

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

通过其他功能, Configuration 的实例(我们将其称为 ConfigObj )被赋予 Interface 的新实例(我们将其称为它 InterfaceObj )。 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 (没有下划线!),即使我从未定义过,也很难它。 变量 chooser 也不会显示在自动填充中( _chooser 会显示),也不会使用

显示
dir(self.config)

vars(self.config)

(都在 aFunction 中的 self.config.chooser 有问题的调用之前被调用)

请记住,以上代码段是整个实际代码的简化版本。我仔细检查了所有内容,但不知道是什么原因,没有下划线的变量是从哪里来的,或者为什么它不可见。 我也无法在单独的环境中复制它,并且我定义的任何其他变量都必须用下划线调用,否则它们只会返回 None

这里可能发生什么魔术? 非常感谢您的帮助!

0 个答案:

没有答案