定义未知数不等于无的参数的方法



我在Python 3.7中工作。

假设我有这两个函数,而i 不能更改其代码(即设置默认参数,例如x=None)。

def f1(x):
    return x
def f2(x,y):
    return x+y

假设我有这样的课。

class test():
    def __init__(self, var1, var2 = None, func):
        self.var1 = var1
        self.var2 = var2
        self.func = func
    def apply_func(self):
        return self.func(self.var1, self.var2)

我如何构建test类的定义,以便仅在var2 is not None时通过self.var2?因此,如果我与属性fun1实例化并调用方法apply_func,则不会收到参数(太多参数)错误?此外,我不想为每种函数类型创建两个不同的类,而唯一的方法函数apply_func

您可以根据函数对象的 __code__.argcount属性将参数列表切成些参数列表,该属性存储函数期望的参数数:

def f1(x):
    return x
def f2(x,y):
    return x+y
class test():
    def __init__(self, func, var1, var2 = None):
        self.var1 = var1
        self.var2 = var2
        self.func = func
    def apply_func(self):
        return self.func(*(self.var1, self.var2)[:self.func.__code__.co_argcount])

这样:

print(test(f1, 1).apply_func())
print(test(f2, 1, 2).apply_func())

输出:

1
3

最新更新