动态选择Python函数的参数

问题描述

我有两个从同一个父类继承的类

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()并将一些参数传递给它。这些参数可以是abcd或它们的组合,取决于孩子的类型,可以是{ {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)