ใน Python ฉันมักจะได้ยินว่าเป็นการ "ให้อภัย" ดีกว่า (ยกเว้นการจับ) แทนที่จะดีกว่า "ขออนุญาต" (การตรวจสอบประเภท / เงื่อนไข) ในเรื่องที่เกี่ยวกับการบังคับใช้การพิมพ์เป็ดใน Python มันคือสิ่งนี้
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
ดีกว่าหรือแย่กว่า
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
ในแง่ของประสิทธิภาพการอ่าน "pythonic" หรือปัจจัยสำคัญอื่น ๆ
hasattr
ถูกนำไปใช้กับการลอง / จับที่แน่นอนนั้น ไม่แน่ใจว่ามันเป็นเรื่องจริงหรือเปล่า (มันจะทำหน้าที่แตกต่างกันในเรื่องของคุณสมบัติใช่มั้ยบางทีฉันอาจจะคิดgetattr
.. )
hasattr
จะใช้ C-API ที่เทียบเท่าgetattr
(กลับมาTrue
หากประสบความสำเร็จFalse
หากไม่ได้) แต่การจัดการข้อยกเว้นใน C นั้นเร็วกว่ามาก