如何将所有 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()
这是我尝试做的一个例子:
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()