Başka bir olası seçenek, ancak daha önce ne demek istediğinize bağlı olarak değişir :
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()
çıktı:
bar:1
zoom!
Bu, Hiçbiri değerli nitelikleri bile kontrol etmenizi sağlar.
Fakat! undefinedBirden fazla yeri kazara başlatmamaya ve karşılaştırmamaya çok dikkat edin, çünkü isbu durumda asla çalışmayacaktır.
Güncelleme:
Yukarıdaki paragrafta neyle ilgili olduğumdan dolayı, asla eşleşmeyen birden fazla tanımsız olması nedeniyle, bu kalıbı son zamanlarda biraz değiştirdim:
undefined = NotImplemented
NotImplementedile karıştırılmamalıdır NotImplementedError, yerleşiktir: bir JS'nin niyetiyle yarı eşleşir undefinedve tanımını her yerde yeniden kullanabilirsiniz ve her zaman eşleşir. Dezavantajları booleans "doğrudur" ve günlükleri ve yığın izleri tuhaf görünebilir (ama sadece bu bağlamda göründüğünü bildiğinizde hızla aşmak).
import string hasattr(string, "lower")