How to find out the arity of a method in Python

后端 未结 5 1601
滥情空心
滥情空心 2020-11-30 03:48

I\'d like to find out the arity of a method in Python (the number of parameters that it receives). Right now I\'m doing this:

def arity(obj, method):
  retur         


        
5条回答
  •  离开以前
    2020-11-30 04:42

    This is the only way that I can think of that should be 100% effective (at least with regard to whether the function is user-defined or written in C) at determining a function's (minimum) arity. However, you should be sure that this function won't cause any side-effects and that it won't throw a TypeError:

    from functools import partial
    
    def arity(func):
        pfunc = func
        i = 0
        while True:
            try:
                pfunc()
            except TypeError:
                pfunc = partial(pfunc, '')
                i += 1
            else:
                return i
    
    def foo(x, y, z):
        pass
    
    def varfoo(*args):
        pass
    
    class klass(object):
        def klassfoo(self):
            pass
    
    print arity(foo)
    print arity(varfoo)
    
    x = klass()
    print arity(x.klassfoo)
    
    # output
    # 3
    # 0
    # 0
    

    As you can see, this will determine the minimum arity if a function takes a variable amount of arguments. It also won't take into account the self or cls argument of a class or instance method.

    To be totally honest though, I wouldn't use this function in a production environment unless I knew exactly which functions would be called though as there is a lot of room for stupid errors. This may defeat the purpose.

提交回复
热议问题