2013-07-31 11 views
18

मैं एक ही मॉड्यूल में एक वर्गएक ही मॉड्यूल

class Foo(): 
    def some_method(): 
     pass 

और एक और वर्ग है में वर्ग के नाम स्ट्रिंग से अजगर वर्ग वस्तु प्राप्त करें:

class Bar(): 
    def some_other_method(): 
     class_name = "Foo" 
     #can I access the class Foo above using the string "Foo"? 

मैं उपयोग करने के लिए सक्षम होना चाहते हैं स्ट्रिंग "फू" का उपयोग कर Foo कक्षा।

from project import foo_module 
foo_class = getattr(foo_module, "Foo") 

मैं एक ही मॉड्यूल में बात की एक ही तरह कर सकते हैं:

अगर मैं का उपयोग करके एक और मॉड्यूल में हूँ मैं यह कर सकता है?

आईआरसी में लोगों ने सुझाव दिया कि मैं एक मैपिंग dict का उपयोग करता हूं जो कक्षाओं में स्ट्रिंग क्लास नामों को मानचित्र करता है, लेकिन यदि कोई आसान तरीका है तो मैं ऐसा नहीं करना चाहता हूं।

+1

और हाँ, एक मानचित्रण dict का उपयोग कर शायद जाने के लिए उचित तरीका है ... –

+1

धन्यवाद। मैं रिफैक्टरिंग समाप्त कर दिया 'क्योंकि मैं' ग्लोबल्स 'का उपयोग नहीं करना चाहता था या मैपिंग dict का उपयोग नहीं करना चाहता था। –

उत्तर

27
import sys 
getattr(sys.modules[__name__], "Foo") 

# or 

globals()['Foo'] 
+0

इस उत्तर को स्वीकार किया गया क्योंकि इसका कारण 'sys' और' globals' विधियों दोनों को शामिल करता है। –

2
globals()[class_name] 

ध्यान दें कि अगर यह सख्ती से आवश्यक नहीं है, तो आप अपने कोड में इसका इस्तेमाल नहीं करने के लिए refactor कर सकते हैं।

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