2014-02-06 45 views
0

的對象是否有可能通過給它的名字,例如,以創建一個類的一個實例:過得去名稱

instance = "TestXYZ"() 

假設TestXYZ由進口上面的代碼和TestXYZ被定義爲一類進口:

class TestXYZ(object): 
    ... 
+1

可以使用'globals()[「TestXYZ」]()',但你爲什麼要這樣做? –

+0

因爲我不喜歡傳遞確切的類對象,但我知道名字。 –

+0

你有什麼理由不想通過課程本身嗎? – lanzz

回答

1

是的,這是可能的。機械師取決於你如何導入類:

klass = globals()['TestXYZ'] 

然後你就可以創建一個:

>>> globals()["TestXYZ"]() 
<__main__.TestXYZ object at 0x10f491090> 

>>> getattr(sys.modules["test_module"], "TestXYZ")() 
<test_module.TestXYZ object at 0x10cf22090> 
1

可以使用得到當前命名空間中的對象的引用該類的實例:

instance = klass() 
1

我不知道爲什麼你要做到這一點,但不是使用globals()我建議你在這裏創建一個字典:

class Foo: 
    pass 

d = {'Foo':Foo} 
ins = d['Foo']() 

或移動類的一些其他模塊:

import some_module     
ins = getattr(some_module, 'Foo')() 
+0

'getattr',請 – michaelmeyer

+0

@doukremt謝謝! –