2013-07-31 22 views
18

aynı modülde sınıf adı dizesinden piton sınıf nesnesi alın "Foo" dizesini kullanan Foo sınıfı.aynı modülde</strong> bir sınıf</p> <pre><code>class Foo(): def some_method(): pass </code></pre> <p>Ve başka sınıf <strong>var

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

aynı modülde benzer şeyler yapabilir: Ben kullanarak başka modülde olursam bunu yapabilirim

?

IRC'deki adamlar, sınıf sınıf adlarını sınıflara eşleyen bir eşleme kuralı kullanmamı önerdi, ancak daha kolay bir yol varsa bunu yapmak istemiyorum.

+1

ve evet, bir eşleme dict kullanarak muhtemelen gitmek için doğru yolu –

+1

teşekkürler. Refactoring'i sonlandırdım çünkü 'globals'ı kullanmak istemedim ya da bir haritalama dict'ı kullandım. –

cevap

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

# or 

globals()['Foo'] 
+0

Bu cevabı kabul etti, çünkü hem "sys" hem de "globals" yöntemlerini kapsar. –

2
globals()[class_name] 

Bu, kesinlikle gerekli değilse, kodunuzu kullanmamak için yeniden kodlamak isteyebileceğinizi unutmayın.

You can do it with help of sys module:

import sys 

def str2Class(str): 
    return getattr(sys.modules[__name__], str) 
4
...
+0

Bu çok işe yarıyor! –

İlgili konular