【发布时间】:2020-08-28 23:11:29
【问题描述】:
我希望创建一个名为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 类中创建一个类变量,并在初始化类时为其赋值。然而,这并没有奏效。
此外,如果有更好的方法来存储可变运行配置并将它们传递给许多班级及其孩子,我很乐意改变我的策略。
提前致谢!
【问题讨论】:
-
你的
__init__Nevers 在你的子类中设置了属性,它覆盖了超类……这与你的全局类完全无关,这对任何属性 -
为什么要使用类继承?只需在模块级别执行
GLOBAL = Global(),所有其他类都可以引用它。 -
不,它只会在设置
GLOBAL = Global()的模块中。如果这与定义class parent的模块相同,那么某些想要从父级继承的模块也将使用import parentmodule; parentmodule.GLOBAL。实际上,您可以将GLOBAL = Global()放在父类级别。 -
有一个问题是
Global()应该何时被实例化——如果它的__init__正在读取配置,那可能是一件坏事。但如果它在实际配置发生之前使用,那是一个坏事工具。这就是它只是在模块级别的优势。您的代码可以在导入所有内容之后但在类实例化它之前对其进行初始化。 -
self._var = 1建议这些类的不同实例可以获得不同的配置。Global算单身吗?
标签: python class inheritance