2010-10-17 19 views
27

पायथन में, कहें कि मेरे पास एक स्ट्रिंग है जिसमें क्लास फ़ंक्शन का नाम होता है जिसे मैं जानता हूं कि एक विशेष ऑब्जेक्ट होगा, मैं इसे कैसे आमंत्रित कर सकता हूं?पायथन - नाम से गतिशील रूप से किसी ऑब्जेक्ट पर किसी फ़ंक्शन का आह्वान कैसे करें?

है:

obj = MyClass() # this class has a method doStuff() 
func = "doStuff" 
# how to call obj.doStuff() using the func variable? 
+1

के बारे में मैं क्यों तुम यह करने के लिए की आवश्यकता होगी उत्सुक हूँ। ऐसा लगता है कि आप कुछ कठिन तरीके से कर रहे हैं। क्या आप अपनी स्थिति पर विस्तार कर सकते हैं? – JoshD

+0

मेरे पास एक क्लाई ऐप है जहां मैं कमांड लाइन से कमांड स्वीकार करना चाहता हूं, लेकिन ऐसा कुछ नहीं करना चाहता: "if command = 'doThing' तो obj.doThing() elseif command = 'someOtherThing' ... और इसलिए। मैं हैंडलर क्लास में विधियों को जोड़ना चाहता हूं और फिर वे स्वचालित रूप से क्ली –

+0

पर उपलब्ध होंगे, क्या ऐसा करने के लिए ठीक है? यह परिस्थितियों का कोई अच्छा विचार नहीं होगा? मैं भी इसी तरह की स्थिति में हूं, लेकिन मुझे यकीन नहीं है कि मैं इस तरह से जाऊंगा। किसी भी तरह, मुझे लगता है कि अगर मैं स्पष्ट रूप से शाखाकरण का उपयोग करता हूं तो यह और अधिक स्पष्ट होगा। आपको क्या लगता है? धन्यवाद! – ultrajohn

उत्तर

44

उपयोग "getattr": http://docs.python.org/library/functions.html?highlight=getattr#getattr

obj = MyClass() 
try: 
    func = getattr(obj, "dostuff") 
    func() 
except AttributeError: 
    print "dostuff not found" 
+0

इस लिंक में एक उपयोगी और महत्वपूर्ण उदाहरण भी है उपर्युक्त प्रश्न https://gist.github.com/hygull/41f94e64b84f96fa01d04567e27eb46b –

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