如何将所有 class 变量从父 *instance* 传递给子 class?

How to pass all class variables from a parent *instance* to a child class?

这是我尝试做的一个例子:

class Parent():
    def __init__():
        self.parent_var = 'ABCD'
        x = Child(self)    # self would be passing this parent instance

class Child():
    def __init__(<some code to pass parent>):
        print(self.parent_var)

foo = Parent()

现在我知道你在想什么了,为什么不直接将 parent_var 本身传递给子实例呢?那么我的实际实现在 Parent 中有超过 20 class 个变量。我不想手动将每个变量传递给在 Parent 中实例化的 Child 实例的 __init__——有没有办法让所有 Parent class 变量对 Child 可用?

编辑 - 已解决: 这是我发现有效的方式:

class Parent():
    def __init__(self):
        self.parent_var = 'ABCD'  # but there are 20+ class vars in this class, not just one
        x = Child(self)           # pass this parent instance to child        

class Child():
    def __init__(self, parent):
        for key, val in vars(parent).items():
            setattr(self, key, val)

        print(self.parent_var)  # successfully prints ABCD


foo = Parent()

您将像传递任何值一样传递 Parent 的实例。

class Parent:
    def __init__(self):
        self.parent_var = 'ABCD'
        x = Child(self)

class Child:
    def __init__(self, obj):
        print(obj.parent_var)

如果您从父 class 继承,所有变量都将出现在子 class 中。在子级中使用 super init 以确保父级 class 实例化。

class Parent:
    def __init__(self):
        self.parent_var = 'ABCD'

class Child(Parent):
    def __init__(self):
        super().__init__()

child = Child()
print(child.parent_var)

打印:

'ABCD'

找到了解决方案并想 post 答案,以防有人发现它需要它:

class Parent():
    def __init__(self):
        self.parent_var = "ABCD"  # just an example
        x = Child(self)           # pass this parent instance (this object) to child        

class Child():
    def __init__(self, parent):
        # copies variables from passed-in object to this object
        for key, val in vars(parent).items():
            setattr(self, key, val)

        print(self.parent_var)  # successfully prints ABCD


foo = Parent()