คำตอบที่ได้รับการยอมรับก่อนหน้านี้ได้รับการเลิก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
โมดูลไลบรารีมาตรฐาน