2009-04-15 17 views
28

क्या यह जांचने का कोई तरीका है कि निर्दिष्ट नाम के साथ एक चर (वर्ग सदस्य या स्टैंडअलोन) परिभाषित किया गया है या नहीं? उदाहरण:यह जांचने का आसान तरीका कि एक चर को पायथन में परिभाषित किया गया है?

if "myVar" in myObject.__dict__ : # not an easy way 
    print myObject.myVar 
else 
    print "not defined" 
+0

तृतीय पक्ष वर्ग, मेरे निजी उद्देश्य के लिए ध्वज सेट करने की आवश्यकता है, मैस क्लास __init __() – grigoryvp

+0

नहीं करना चाहता है यह वास्तव में भ्रमित है। यह निर्धारित करने के लिए कि कौन से चर का उपयोग किया जाता है, बहुत सारे कोड क्यों लिखें? बस एक उदाहरण बनाएं, प्रिंट उदाहरण .__ dict __। कुंजी() या डीआईआर (उदाहरण) करें और आप सभी विशेषता नामों को जानते हैं। –

+0

मुझे डर है कि मैं भी उलझन में हूं। प्रश्न वर्ग के सदस्यों और स्टैंडअलोन वर्र्स दोनों के बारे में पूछता है। जाहिर है, स्टैंडअलोन, टॉप-स्तरीय वर्र्स के लिए कोई __init__ नहीं है; कौन सा तीसरा पक्ष मिलाज्मा इतना खराब बनाया गया है कि इसके कई चर, कई गुंजाइश स्तर पर, पूरी तरह अस्तित्वहीन होने का खतरा है? –

उत्तर

27

एक कॉम्पैक्ट रास्ता:

print myObject.myVar if hasattr(myObject, 'myVar') else 'not defined' 

HTW के रास्ते अधिक pythonic है, हालांकि है।

hasattr()x in y.__dict__ से अलग है, हालांकि यह है: hasattr(), विरासत में मिला वर्ग को ध्यान में गुण, __getattr__ से लौटे गतिशील लोगों के साथ ही लेता है जबकि y.__dict__ केवल उन वस्तुओं है कि y उदाहरण के गुण होते हैं।

+0

मुझे लगता है कि वह सिर्फ हैट्टर() के लिए देख रहा है। – monkut

+0

हाँ, शायद सबसे अधिक। और एक वैश्विक चर के बारे में क्या? (मॉड्यूल में घोषित, कक्षा नामस्थान में नहीं)? – grigoryvp

+0

@ हेई ऑफ़ हेल: शायद (ग्लोबल्स (एक्स) में एक्स, लेकिन मेरा असली जवाब यह होगा कि कोड को ऐसा करने की ज़रूरत है जो गैर-पायथनिक है और वास्तव में चर को किसी भी को प्रारंभ करना चाहिए। – Miles

21
try: 
    print myObject.myVar 
except NameError: 
    print "not defined" 
+0

कम से कम चर और आउटपुट सही प्राप्त करें :-) +1 – paxdiablo

+16

यदि myObject परिभाषित किया गया है, लेकिन 'myVar' नहीं है, तो आपको इसके बजाय एक विशेषताएँ मिल जाएगी। –

9

पाओलो सही है, आपके द्वारा बातें कर रहे हैं इस की जरूरत है के साथ कुछ बंद हो सकता है। लेकिन अगर आप कुछ जल्दी और गंदे कर रहे हैं तो शायद आपको Idiomatic Python परवाह नहीं है, तो यह छोटा हो सकता है।

try: x 
except: print "var doesn't exist" 
4

पढ़ें और या चाल अजगर में: 'एक' स्थानीय लोगों में() और एक

+0

विफल होता है यदि कोई खाली स्ट्रिंग या कोई अन्य गलत मूल्य है। –

4

परीक्षण करने के लिए करता है, तो चर, myVar, परिभाषित किया गया है:

result = dir().count('myvar') 

myVar परिभाषित किया गया है, तो परिणाम है 1, अन्यथा यह 0 होगा।

यह पायथन संस्करण 3.1.2 में ठीक काम करता है।

+0

क्यों नहीं, 'myvar' dir() 'में? – rdb

संबंधित मुद्दे

 संबंधित मुद्दे