2012-11-09 17 views
8

कोड इस तरह हैं:पायथन में स्ट्रिंग द्वारा क्लास चर का उपयोग कैसे करें?

class Test: 
    a = 1 
    def __init__(self): 
     self.b=2 

जब मैं Test का एक उदाहरण बनाने के लिए, मैं अपनी उदाहरण चर इस तरह b (स्ट्रिंग "बी" का प्रयोग करके) का उपयोग कर सकते हैं:

test = Test() 
a_string = "b" 
print test.__dict__[a_string] 

लेकिन यह a के लिए self.__dict__ के लिए काम नहीं करता है a नाम की एक कुंजी नहीं है। तो मैं a तक कैसे पहुंच सकता हूं यदि मेरे पास केवल a स्ट्रिंग है?

धन्यवाद!

+0

कारण 'self .__ dict__' में 'a' नाम की कुंजी नहीं है, यह है कि यह' self.__ वर्ग __.__ dict__' में है। यदि आप वास्तव में चीजों को मैन्युअल रूप से करना चाहते हैं, तो आप गुणों के लिए खोज आदेश पर पढ़ सकते हैं और उसी क्रम में सब कुछ जांच सकते हैं ... लेकिन आप वास्तव में चीजों को मैन्युअल रूप से नहीं करना चाहते हैं। (आपको स्लॉट्स, प्रॉपर्टीज, क्लासिक बनाम न्यू-स्टाइल क्लासेस, कस्टम '__dict__', कस्टम डिस्क्रिप्टर, और अन्य सभी चीजों के बारे में जानना मजेदार होगा, लेकिन आपकी समस्या को हल करने के लिए सीधे प्रासंगिक नहीं है।) – abarnert

+1

पीएस, चूंकि यह स्पष्ट रूप से पायथन 2.x है, तो आप शायद 'क्लास टेस्ट (ऑब्जेक्ट)' चाहते हैं, जब तक कि आपके पास नई शैली के वर्गों से बचने के लिए कोई विशिष्ट कारण न हो। सरल छोटे परीक्षण कार्यक्रमों के लिए भी, आदत में आने लायक है। (और विशेष रूप से परीक्षण कार्यक्रमों के लिए जो स्पष्ट रूप से उन तरीकों पर भरोसा करते हैं जिनमें दो प्रकार के वर्ग भिन्न होते हैं ...) – abarnert

उत्तर

21
getattr(test, a_string) 

प्लस कुछ और वर्ण इसलिए मैं इसे पोस्ट कर सकता हूं।

9

उपयोग getattr इस तरह से तुम क्या चाहते करने के लिए:

test = Test() 
a_string = "b" 
print getattr(test, a_string) 
4

इस प्रयास करें:

class Test:  
    a = 1  
    def __init__(self): 
     self.b=2 

test = Test()  
a_string = "b" 
print test.__dict__[a_string] 
print test.__class__.__dict__["a"] 
1

आप उपयोग कर सकते हैं:

getattr(Test, a_string, default_value)

एक तिहाई तर्क के साथ वापस जाने के लिए a_string के मामले में कुछ default_value नहीं है Test कक्षा पर मिला।

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