Poprzednio zaakceptowana odpowiedź została wycofana z dnia Python 3.0. Zamiast używać inspect.getargspec, powinieneś teraz wybrać Signatureklasę, która go zastąpiła.
Tworzenie podpisu dla funkcji jest łatwe dzięki signaturefunkcji :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Teraz możesz szybko wyświetlić jego parametry, strużywając go:
str(sig) # returns: '(self, arg1, kwarg1=None)'
lub możesz również uzyskać mapowanie nazw atrybutów na obiekty parametrów za pośrednictwem sig.parameters.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
Dodatkowo, można zadzwonić lenna sig.parameterscelu również zobaczyć liczbę argumentów funkcja ta wymaga:
print(len(params)) # 3
Każdy wpis w paramsmapowaniu jest w rzeczywistości Parameterobiektem, który ma dalsze atrybuty ułatwiające życie. Na przykład pobranie parametru i wyświetlenie jego wartości domyślnej można teraz łatwo wykonać za pomocą:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
podobnie dla pozostałych obiektów zawartych w parameters.
Jeśli chodzi o 2.xużytkowników Pythona , chociaż inspect.getargspec nie jest przestarzały, język wkrótce będzie :-). SignatureKlasa nie jest dostępny w 2.xserii i nie będzie. Więc nadal musisz pracować inspect.getargspec.
Jeśli chodzi o przejście między Python 2 i 3, jeśli masz kod, który opiera się na interfejsie getargspecw Pythonie 2 i przełączania signaturesię 3to zbyt trudne, to trzeba cenną opcję korzystania inspect.getfullargspec. Oferuje podobny interfejs do getargspec(pojedynczy wywoływalny argument) w celu pobrania argumentów funkcji, jednocześnie obsługując kilka dodatkowych przypadków, które getargspecnie:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Podobnie jak w przypadku getargspec,getfullargspec zwraca wartość NamedTuplezawierającą argumenty.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectstandardowego modułu biblioteki.