คำตอบที่ได้รับการยอมรับก่อนหน้านี้ได้รับการเลิกPython 3.0ณ แทนที่จะใช้inspect.getargspecคุณควรเลือกSignatureชั้นเรียนที่แทนที่
การสร้างลายเซ็นสำหรับฟังก์ชั่นนั้นง่ายผ่านsignatureฟังก์ชั่น :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
ตอนนี้คุณสามารถดูพารามิเตอร์ได้อย่างรวดเร็วโดยการนำstrเข้าไปที่:
str(sig) # returns: '(self, arg1, kwarg1=None)'
sig.parametersหรือคุณยังสามารถได้รับการทำแผนที่ของชื่อแอตทริบิวต์วัตถุพารามิเตอร์ผ่าน
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
นอกจากนี้คุณสามารถโทรlenได้ที่sig.parametersจะเห็นจำนวนของอาร์กิวเมนต์ฟังก์ชั่นนี้ต้องใช้:
print(len(params)) # 3
แต่ละรายการในการparamsทำแผนที่เป็นParameterวัตถุที่มีคุณสมบัติเพิ่มเติมทำให้ชีวิตของคุณง่ายขึ้น ตัวอย่างเช่นการคว้าพารามิเตอร์และการดูค่าเริ่มต้นทำได้ง่าย ๆ ด้วย:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
parametersในทำนองเดียวกันสำหรับส่วนที่เหลือของวัตถุที่มีอยู่ใน
สำหรับ2.xผู้ใช้Python แม้ว่าinspect.getargspec จะไม่ได้เลิกใช้ภาษาก็จะเป็น :-) Signatureระดับคือไม่สามารถใช้ได้ใน2.xชุดและจะไม่ inspect.getargspecดังนั้นคุณยังคงต้องทำงานร่วมกับ
สำหรับการเปลี่ยนระหว่างงูหลาม 2 และ 3 ถ้าคุณมีรหัสที่อาศัยอยู่กับอินเตอร์เฟซของgetargspecธ ที่ 2 และการเปลี่ยนไปsignatureใน3เป็นเรื่องยากเกินไปที่คุณจะมีตัวเลือกที่มีคุณค่าinspect.getfullargspecของการใช้ มันมีอินเทอร์เฟซที่คล้ายกันกับgetargspec(อาร์กิวเมนต์ที่เรียกได้เพียงครั้งเดียว) เพื่อที่จะคว้าอาร์กิวเมนต์ของฟังก์ชันในขณะที่จัดการกับกรณีเพิ่มเติมบางอย่างที่getargspecไม่ได้:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
เช่นเดียวกับgetargspec, getfullargspecส่งกลับNamedTupleซึ่งมีข้อโต้แย้ง
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectโมดูลไลบรารีมาตรฐาน