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! undefined
Birden fazla yeri kazara başlatmamaya ve karşılaştırmamaya çok dikkat edin, çünkü is
bu 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
NotImplemented
ile karıştırılmamalıdır NotImplementedError
, yerleşiktir: bir JS'nin niyetiyle yarı eşleşir undefined
ve 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")