使用继承在不同 类 之间共享数据

Sharing data between different classes using inheritance

我有许多不同的 classes 具有不同的职责,不共享任何方法。 但是,我想分享一些它们之间共有的变量。 为了实现这个目标,我选择了继承,但似乎并没有像我预期的那样工作。

中提出了一种不同的方法,但我不喜欢必须将所有实例传递给每个构造函数。

在我到目前为止所做的测试中,似乎 class 的每个实例都实例化了它自己的 superclass 实例。因此,classes 之间没有共享变量,而是在实例中拆分。

MWE 解释:

class Parent:
    def __init__(self):
        self.var1 = None


class Child1(Parent):
    def __init__(self, var1):
        super().__init__()
        self.var1 = var1


class Child2(Parent):
    def __init__(self, var1):
        super().__init__()
        self.var1 = var1


child1 = Child1(1)
child2 = Child2(2)

print(child1.var1)  # prints 1
print(child2.var1)  # prints 2

我是python的新手,看来我理解有误。 我期望的行为是两次 2 都会被打印,因为 child2 是最后实例化的,因此也为 child1 设置 var1=2 .

如何让子classes 共享相同的 superclass 实例和变量?我是否必须从 superclass 向下实例化而不是从 subclasses 向上实例化?

编辑:哎呀,对不起,我是初学者 Karl!猜猜我会检查作文然后..

您将 实例变量 误认为是 class 变量 。在这里,您定义了 实例变量 因为赋值是在 __init__ 内部(实例的 初始化 )。
你想要的是定义一个class变量,像这样:

class Parent:
    var1 = None


class Child1(Parent):
    def __init__(self, var1):
        super().__init__()
        Parent.var1 = var1


class Child2(Parent):
    def __init__(self, var1):
        super().__init__()
        Parent.var1 = var1


child1 = Child1(1)
child2 = Child2(2)

print(child1.var1)  # prints 2 !! <-----
print(child2.var1)  # prints 2

以前,每个实例都有自己的 var1 变量,根据定义,这就是 实例变量

但在我的示例中,var1 变量被定义到 class 对象 中。每个实例都可以引用它(使用 Parent.var1),但它始终是同一个变量。但是 Python 很好,可以让你访问 class 变量 就像它们是 实例变量 一样,这可能会导致混淆。

但请记住,现在这就是 继承 的设计目的。是的,你可以这样使用,但有点不寻常。