ตัวเลือกอื่นที่เป็นไปได้ แต่ขึ้นอยู่กับว่าคุณหมายถึงอะไรก่อนหน้านี้ :
undefined = object()
class Widget:
def __init__(self):
self.bar = 1
def zoom(self):
print("zoom!")
a = Widget()
bar = getattr(a, "bar", undefined)
if bar is not undefined:
print("bar:%s" % (bar))
foo = getattr(a, "foo", undefined)
if foo is not undefined:
print("foo:%s" % (foo))
zoom = getattr(a, "zoom", undefined)
if zoom is not undefined:
zoom()
เอาท์พุท:
bar:1
zoom!
วิธีนี้ช่วยให้คุณสามารถตรวจสอบแอตทริบิวต์ที่ไม่มีค่าได้
แต่! ระวังให้มากคุณจะไม่ยกตัวอย่างและเปรียบเทียบundefined
สถานที่หลายแห่งโดยไม่ตั้งใจเพราะมันis
จะไม่ทำงานในกรณีนั้น
ปรับปรุง:
เนื่องจากสิ่งที่ฉันถูกเตือนเกี่ยวกับในย่อหน้าข้างต้นมีหลาย undefineds ที่ไม่ตรงกันฉันเพิ่งปรับเปลี่ยนรูปแบบนี้เล็กน้อย:
undefined = NotImplemented
NotImplemented
เพื่อไม่ให้สับสนกับNotImplementedError
มันคือในตัว: มันตรงกับเจตนาของ JS undefined
และคุณสามารถนำความหมายกลับมาใช้ใหม่ได้ทุกที่และมันจะจับคู่เสมอ ข้อเสียคือมันเป็น "ความจริง" ใน booleans และสามารถดูแปลกในบันทึกและร่องรอยสแต็ค (แต่คุณได้อย่างรวดเร็วเมื่อคุณรู้ว่ามันปรากฏในบริบทนี้เท่านั้น)
import string hasattr(string, "lower")