2010-04-20 12 views
9

में किसी फ़ील्ड के अस्तित्व के लिए परीक्षण करना मेरे पास एक त्वरित प्रश्न है। मेरे पास एक 2 डी सरणी है जो कक्षा के उदाहरण को संग्रहीत करती है। सरणी के तत्वों को एक विशेष फ़ाइल को एक टेक्स्ट फ़ाइल के आधार पर असाइन किया जाता है जिसे प्रोग्राम में पहले पढ़ा जाता है। चूंकि मुझे फ़ाइल में देखने के बिना पता नहीं है कि किसी विशेष तत्व पर कौन सी कक्षा संग्रहीत की जाती है, मैं उस फ़ील्ड को संदर्भित कर सकता हूं जो उस इंडेक्स में मौजूद नहीं है (उस इंडेक्स में अस्थायी का उदाहरण संग्रहीत होने पर उपस्थिति का जिक्र है)। मैं इसका परीक्षण करने की एक विधि के साथ आया हूं, लेकिन यह लंबे समय तक घुमाया गया है और एक दूसरे मैट्रिक्स की आवश्यकता है। क्या कक्षा में किसी क्षेत्र के अस्तित्व के परीक्षण के लिए कोई कार्य है?कक्षा

class temp(): 
    name = "default" 

class temp1(): 
    appearance = "@" 

उत्तर

3

आप के लिए देख रहे:

isinstance (वस्तु, classinfo)

वापसी अगर सही वस्तु तर्क classinfo तर्क का एक उदाहरण है, या एक के है (प्रत्यक्ष या अप्रत्यक्ष) subclass इसके। क्लासिनफ़ो एक प्रकार ऑब्जेक्ट (नई-स्टाइल क्लास) और ऑब्जेक्ट उस प्रकार का ऑब्जेक्ट है या ए (प्रत्यक्ष या अप्रत्यक्ष) उपclass है। यदि ऑब्जेक्ट उदाहरण या प्रकार का ऑब्जेक्ट नहीं है, तो फ़ंक्शन हमेशा झूठा देता है। यदि क्लासिनोफ़ न तो ऑब्जेक्ट और न ही ऑब्जेक्ट ऑब्जेक्ट है, तो यह कक्षा या प्रकार ऑब्जेक्ट्स का टुपल हो सकता है, या में अन्य ऐसे टुपल्स (अन्य अनुक्रम प्रकार स्वीकार नहीं किए गए हैं) को दोबारा शामिल किया जा सकता है। यदि classinfo कक्षाओं, प्रकार, या कक्षाओं के tuple, प्रकार, और ऐसे tuples नहीं है, एक TypeError अपवाद उठाया गया है।

जो कुछ भी आप करने का प्रयास कर रहे हैं वह एक अच्छा विचार नहीं लग रहा है। कृपया अपनी मूल आवश्यकता का अधिक विस्तार से वर्णन करें, और हम आपको बेहतर डिजाइन के साथ आने में मदद करेंगे।

25

hasattr(x, 'foo') है निर्मित एक द्विआधारी समारोह की जाँच करता है कि क्या वस्तु x एक विशेषता x.foo (चाहे वह या अपने वर्ग से यह हो जाता है नहीं) है, जो कि तुम क्या कह रहे हैं के करीब लगता है है। चाहे आप जो पूछ रहे हैं वह वास्तव में है कि आप पूछना चाहिए एक अलग मुद्दा है - जैसा कि @ एली के उत्तर से पता चलता है, आपका डिज़ाइन अजीब लगता है। हालांकि, यह आपके प्रश्न का उत्तर देने के लिए उत्तर देता है ;-)।

2

आप इसे करने के लिए अपवाद हैंडलिंग का भी उपयोग कर सकते हैं।

try: 
    val = x.name 
except AttributeError: 
    val = x.appearance