Poprzednio zaakceptowana odpowiedź została wycofana z dnia Python 3.0
. Zamiast używać inspect.getargspec
, powinieneś teraz wybrać Signature
klasę, która go zastąpiła.
Tworzenie podpisu dla funkcji jest łatwe dzięki signature
funkcji :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Teraz możesz szybko wyświetlić jego parametry, str
uż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ć len
na sig.parameters
celu również zobaczyć liczbę argumentów funkcja ta wymaga:
print(len(params)) # 3
Każdy wpis w params
mapowaniu jest w rzeczywistości Parameter
obiektem, 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.x
użytkowników Pythona , chociaż inspect.getargspec
nie jest przestarzały, język wkrótce będzie :-). Signature
Klasa nie jest dostępny w 2.x
serii 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 getargspec
w Pythonie 2 i przełączania signature
się 3
to 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 getargspec
nie:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Podobnie jak w przypadku getargspec
,getfullargspec
zwraca wartość NamedTuple
zawierającą argumenty.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspect
standardowego modułu biblioteki.