Câu trả lời được chấp nhận trước đó đã được phản đối tính Python 3.0
. Thay vì sử dụng, inspect.getargspec
bây giờ bạn nên chọn Signature
lớp thay thế nó.
Tạo chữ ký cho chức năng thật dễ dàng thông qua signature
chức năng :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Bây giờ, bạn có thể xem các tham số của nó một cách nhanh chóng bằng cách nhập str
nó:
str(sig) # returns: '(self, arg1, kwarg1=None)'
hoặc bạn cũng có thể có được ánh xạ tên thuộc tính đến các đối tượng tham số thông qua sig.parameters
.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
Ngoài ra, bạn có thể gọi len
về sig.parameters
cũng để xem số lượng các đối số chức năng này đòi hỏi:
print(len(params)) # 3
Mỗi mục trong params
ánh xạ thực sự là một Parameter
đối tượng có thêm các thuộc tính làm cho cuộc sống của bạn dễ dàng hơn. Ví dụ: lấy một tham số và xem giá trị mặc định của nó giờ đây được thực hiện dễ dàng với:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
tương tự cho phần còn lại của các đối tượng chứa trong parameters
.
Đối với 2.x
người dùng Python , mặc dù inspect.getargspec
không bị phản đối, ngôn ngữ sẽ sớm là :-). Các Signature
lớp học không có sẵn trong các 2.x
loạt và sẽ không được. Vì vậy, bạn vẫn cần phải làm việc với inspect.getargspec
.
Đối với việc chuyển đổi giữa Python 2 và 3, nếu bạn có mã dựa trên giao diện của getargspec
Python 2 và việc chuyển sang signature
in 3
quá khó khăn, bạn có tùy chọn sử dụng có giá trịinspect.getfullargspec
. Nó cung cấp một giao diện tương tự getargspec
(một đối số có thể gọi được) để lấy các đối số của hàm đồng thời xử lý một số trường hợp bổ sung getargspec
không:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Như với getargspec
, getfullargspec
trả về một NamedTuple
trong đó có chứa các đối số.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspect
mô-đun thư viện chuẩn.