एक और संभावित विकल्प, लेकिन यह निर्भर करता है कि आप पहले से क्या मतलब है :
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 उस स्थिति में यह कभी काम नहीं करेगा।
अपडेट करें:
उपरोक्त पैराग्राफ में जो मैं चेतावनी दे रहा था, उसके कारण कई अपरिभाषित जो कभी मेल नहीं खाते, मैंने हाल ही में इस पैटर्न को थोड़ा संशोधित किया है:
undefined = NotImplemented
NotImplemented, के साथ भ्रमित होने की नहीं NotImplementedError, एक अंतर्निहित है: यह एक जेएस के इरादे से अर्ध-मेल खाता है undefinedऔर आप हर जगह इसकी परिभाषा का पुन: उपयोग कर सकते हैं और यह हमेशा मेल खाएगा। कमियां यह है कि यह बूलियन में "सत्य" है और यह लॉग और स्टैक के निशान में अजीब लग सकता है (लेकिन आप जल्दी से इसे खत्म कर देते हैं जब आप जानते हैं कि यह केवल इस संदर्भ में प्रकट होता है)।
import string hasattr(string, "lower")