说我有这个功能:
def destroy_all_the_users(a, b, c, d, e, f=2, *g, **h):
i = 2
似乎我可以计算它的最小arity(我必须提供的最小参数量),如下所示:
import types
# This doesn't work on some C functions like, say, file.write
def get_minimum_arity(func_alike):
# This might not be a function but a method
if type(func_alike) is types.MethodType:
func_alike = func_alike.im_func
# This might not be a function but a __call__'able
if type(func_alike) is not types.FunctionType:
func_alike = func_alike.__call__
return func_alike.__code__.co_argcount - len(func_alike.__defaults__)
但是,我如何确定这5个参数的名称?对于destroy_all_the_users
,那将是('a', 'b', 'c', 'd', 'e')
。可能看起来很有前途的属性(例如,destroy_all_the_users.__code__.co_varnames
也包括g, h, i
)并且我不一定拥有该函数的源代码。 dis.dis(destroy_all_the_users)
的输出似乎同样无益。
例如,我想检查一个任意类的file
,它甚至不能从file
派生。所有你真正关心的是这个任意类有足够的相同方法(比如write
),这意味着至少他们应该接受相同数量的参数(1,但是更多的可选参数不是问题)和相同的参数名称(......坏例子:似乎file.write
是特殊的,并且不允许通过关键字传递其强制参数))。 /子>
答案 0 :(得分:2)
这些代码行
>>> import inspect
>>> inspect.getfullargspec(destroy_all_the_users)
为您提供此输出:
FullArgSpec(args=['a', 'b', 'c', 'd', 'e', 'f'],
varargs='g',
varkw='h',
defaults=(2,),
kwonlyargs=[],
kwonlydefaults=None,
annotations={})