如何为 class 初始化动态添加参数?
How to dynamically add arguments to class initialization?
我有一个主 class 和进一步的 class 是主 class 的扩展。主 class 在其 init 中有两个参数,每个子 classes 也使用这些参数 + 单独的参数
class Main:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
class Child1(Main):
def __init__(self, var1, var2, **kwargs):
super().__init__(var1, var2)
self.__dict__.update(kwargs)
self.var3 = var3
self.var4 = var4
class Child2(Main):
def __init__(self, var1, var2, **kwargs):
super().__init__(var1, var2)
self.__dict__.update(kwargs)
self.var5 = var5
我希望能够通过传递 Child1(var1 = 1, var2 = 2, var3 = 3, var4 = 4)
和 Child2(var1 = 1, var2 = 2, var5 = 5)
等实际值来迭代初始化子 classes,但实际上不必手动输入它们。理想情况下,我可以遍历存储如下值的字典:
my_dict = {'Child1': {'var3': 3, 'var4': 4}, 'Child2': {'var5': 5}}
请注意,我只想像这样传递 class 特定变量。最后,我想有这样的东西:
var1 = [1, 2, 3, 4]
var2 = [1, 2]
for x,y, (k,v) in product(var1, var2, my_dict.items()):
v(var1 = x, var2 = y, $fill missing keyword arguments in here that are specific to child class$)
我实际上能够自己解决这个问题。我能够在 my_dict 上使用解包来动态填充缺少的参数。
**for x,y, (k,v) in product(var1, var2, my_dict.items()):
v(var1 = x, var2 = y, **v)
我有一个主 class 和进一步的 class 是主 class 的扩展。主 class 在其 init 中有两个参数,每个子 classes 也使用这些参数 + 单独的参数
class Main:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
class Child1(Main):
def __init__(self, var1, var2, **kwargs):
super().__init__(var1, var2)
self.__dict__.update(kwargs)
self.var3 = var3
self.var4 = var4
class Child2(Main):
def __init__(self, var1, var2, **kwargs):
super().__init__(var1, var2)
self.__dict__.update(kwargs)
self.var5 = var5
我希望能够通过传递 Child1(var1 = 1, var2 = 2, var3 = 3, var4 = 4)
和 Child2(var1 = 1, var2 = 2, var5 = 5)
等实际值来迭代初始化子 classes,但实际上不必手动输入它们。理想情况下,我可以遍历存储如下值的字典:
my_dict = {'Child1': {'var3': 3, 'var4': 4}, 'Child2': {'var5': 5}}
请注意,我只想像这样传递 class 特定变量。最后,我想有这样的东西:
var1 = [1, 2, 3, 4]
var2 = [1, 2]
for x,y, (k,v) in product(var1, var2, my_dict.items()):
v(var1 = x, var2 = y, $fill missing keyword arguments in here that are specific to child class$)
我实际上能够自己解决这个问题。我能够在 my_dict 上使用解包来动态填充缺少的参数。
**for x,y, (k,v) in product(var1, var2, my_dict.items()):
v(var1 = x, var2 = y, **v)