Ich bin daran interessiert, eine allgemeine Möglichkeit zu erhalten, eine Liste von Argumenten und Schlüsselwortargumenten zu erhalten, die von einem aufrufbaren Python-Objekt genommen werden. Dies ist geradlinig für Funktionen mit der inspect.getargspec
Funktion, zum Beispiel:Argumente für jedes aufrufbare Objekt erhalten?
import inspect
from functools import partial
def foo(*args, **kwargs):
return args, kwargs
print(inspect.getargspec(foo))
>>ArgSpec(args=[], varargs='args', keywords='kwargs', defaults=None)
def bar(*args):
return args
print(inspect.getargspec(bar))
>>ArgSpec(args=[], varargs='args', keywords=None, defaults=None)
Dies ist jedoch nicht in Fällen wie diese:
partial_function = partial(foo, kwarg="value")
inspect.getargspec(partial_function)
>>TypeError: <functools.partial object at 0x11748bc58> is not a Python function
class Foo(object):
def __call__(self, *args, **kwargs):
return args, kwargs
foo_instance = Foo()
inspect.getargspec(foo_instance)
>>TypeError: <__main__.Foo object at 0x116c13ed0> is not a Python function
inspect.getargspec(zip)
>>TypeError: <built-in function zip> is not a Python function
Hinweis, dass es Möglichkeiten gibt, die Argumente zu erhalten, für die Teilfunktion und für das aufrufbare Objekt, das heißt:
inspect.getargspec(partial_function.func)
>>ArgSpec(args=[], varargs='args', keywords='kwargs', defaults=None)
inspect.getargspec(foo_instance.__call__)
>>ArgSpec(args=['self'], varargs='args', keywords='kwargs', defaults=None)
aber ich möchte eine allgemeinere Art und Weise, diese Ergebnisse zu erhalten, wenn überhaupt möglich.
oh warte, verwenden Sie Python 2? –
Ahh ja, ich benutze Python 2. Gut zu wissen, dass Python 3 so große Unterstützung für diese Informationen hat. –