说我有一个功能:
def omni(self, func, *args, **kwargs):
总是调用func
。
但是,func的参数可以是任何组合。例如
def func(self):
# omni should only pass in self
def func():
# omni should pass in nothing
def func(foo, key='foo'):
# omni should pass in a foo param and a key if supplied one
def func(*args, **kwargs):
# omni should pass in everything
有没有办法从func
只传递omni
所需的参数?即上述可能吗?
离。
def foo(m):
pass
obj.omni(foo, m, a=1)
# this should call
foo(m)
def foo(self, **kwargs):
pass
obj.omni(foo, m, 1, b=2)
# this should call
foo(self, b=2)
答案 0 :(得分:0)
def omni(self=None, func=None, *args=None, **kwargs=None)
您应该使用上面的可选参数。请看这里http://www.diveintopython.net/power_of_introspection/optional_arguments.html。
答案 1 :(得分:0)
这听起来很复杂。
您必须检查func
,并且对于func
是对象的情况,func.__call__
也是如此。
真实函数有func_defaults
和func_code
,后者又有co_argcount
和co_flags
。
在他们的帮助下,你可以检查
*args
/ **kwargs
。