python中的全局类

问题描述 投票:0回答:1

我正在寻找一个名为Global的运行配置类,它将存储重要的变量。该课程将传递给许多班级及其孩子。例如:

class Global:
    def __init__(self):
        self._var = 1

    @property
    def var(self):
        return self._var

class parent:
    def __init__(self, GLOBAL):
        self.GLOBAL = GLOBAL
        print(self.GLOBAL.var) # this works

class child(parent):
    def __init__(self):
        print(self.GLOBAL.var) # this doesn't work (because referencing the parent's instance variable)

如何使Global类可供父类的所有子类访问(而又不将其传递给每个子类的构造函数)?我还尝试在parent类中创建一个类变量,并在初始化类时为其分配值。但是,这没有用。

此外,如果有更好的方法来存储可变的运行配置并将其传递给许多班级及其孩子,我很乐意更改我的策略。

提前感谢一吨!

python class inheritance
1个回答
1
投票

1)您的child类应像这样调用parent __init__方法:

super().__init__(...)

否则,您将根本不会设置GLOBAL字段。我想您可以阅读更多here

2)您想创建一个全局对象,不是吗?我的意思是,不是类,而是类的对象,因为您正在构造函数中访问变量var。无论如何,您只能在模块范围内创建一个变量并使用它。

Global:
    ...

OtherClass:
    def run(self):
        print(_global_settings)

_global_settings = Global()  # or something similar

3)如果可能,您最好遵循PEP8样式,这样您的代码将更易于阅读和理解。特别是,将您的班级名称大写,并为班级字段使用小写字母。


0
投票

如果您的child类没有覆盖构造函数__init__,则在构造parent.__init__对象时将使用child,您将获得所需的功能。但是,如果需要为派生类编写专门的构造函数,则需要将Global对象传递给parent.__init__中的child.__init__构造函数的显式调用。

Python没有自动构造函数链接。

© www.soinside.com 2019 - 2024. All rights reserved.