我有一个非常通用的函数调用,看起来像
result = getattr(class_name, func_name)(result)
此函数调用更新result
。这个函数调用非常通用,因此它可以调用来自不同类的许多函数。目前,所有这些函数只接受一个参数result
。但是,它并不适用于某些函数需要传递的内容超过result
但更多参数(例如args
)的情况。
Python(2.7)中是否有一种方法允许这个泛型函数调用传递args
但是仍然调用不具有额外参数的函数?如果没有,那么解决这个问题的更好方法是什么?
编辑:我无法更改现有的函数定义,包括仅仅使用参数result
的函数定义。我只能改变这一行:
result = getattr(class_name, func_name)(result)
答案 0 :(得分:1)
您可以在函数调用中添加*
。这会将result
作为多个参数传递。假设您有两个功能:
class YourClass:
def my_first_def(one_arg):
return (1, 2)
def my_second_def(one_arg, second_arg):
return (1, 2, 3)
if not instanceof(result, tuple):
result = (result,)
result = getattr(YourClass, 'my_first_def')(*result)
result = getattr(YourClass, 'my_second_def')(*result)
请注意result
必须是tuple
答案 1 :(得分:0)
对此的一般解决方案是,当我们想要提供诸如此类的通用函数名称时,每个类都有责任实现其对该函数的本地定义。这就是为什么你在许多不同的类中看到一个方法 __ init __ 。系统标准化名称,将要求放在类上。
另一种常见的方法是从 C 借用:你传递一个参数列表,规范的* args解决方案。这允许一个通用的,灵活的函数适当地解释arglist。