问题描述
class parent:
@abstractmethod
def update(self):
pass
class child1(parent):
def update(self):
do_something
class child2(parent):
def update(self):
do_something_else
以及类似于以下内容的脚本
child = either child1() or child2() depending on some condition
a = func_a()
b = func_b()
c = func_c()
d = func_d()
在该脚本中,我想调用child.update()
并将一些参数传递给它。这些参数可以是a
,b
,c
或d
或它们的组合,取决于孩子的类型,可以是{ {1}}或child1
。这些所需参数的数量也有所不同。
根据这种情况,最适合修改将哪些参数传递给child2
方法的最干净的方法是什么?
我想避免复杂的update
条件(因为我的实际代码大于此示例),我想到了将所有可能的参数作为dict传递,然后选择在if,elif
中使用哪些参数方法,但我也不喜欢。
解决方法
关键字参数为此类问题提供了一种干净的解决方案:
class parent:
@abstractmethod
def update(self,**kwargs):
pass
class child1(parent):
def update(self,**kwargs):
print(kwargs['a'])
print(kwargs['b'])
class child2(parent):
def update(self,**kwargs):
print(kwargs['a'])
print(kwargs['c'])
print(kwargs['d'])
c = child1()
c.update(a=2,b=3)
c = child2()
c.update(a=3,d='e',c=3)