2014-06-19 79 views
-2

我想創建一個基於字符串關鍵字的字典返回Foo的子類,我可以稍後實例化。這是可能的還是對問題的解決方法不正確?通過引用實例化類

僞代碼:

subclasses_of_foo = {"foo1": Foo1, "foo2": Foo2} 
subclass_of_foo = subclasses_of_foo["foo1"] 

instance = subclass_of_foo() 
+0

不是什麼「鴨打字」的意思,但耶是有效的。 –

+0

如果你喜歡 – svvac

+0

你甚至可以做'instance = subclasses_of_foo [「foo1」]()'如果你刪除子類部分,它是鴨子打字嗎? (只要我打算在實例化對象上調用方法) – SverkerSbrg

回答

1

當然,你可以做到這一點。搏一搏。

+0

謝謝!我剛剛搞亂了班級地圖和班級定義的順序。 – SverkerSbrg

1

您的方法是完全正確的,並有效。類只是對象,就像Python中的所有其他類一樣。它們可以作爲值存儲在字典中。

演示:

>>> class Foo: 
...  pass 
... 
>>> class Bar: 
...  pass 
... 
>>> classmap = {'foo': Foo, 'bar': Bar} 
>>> classmap['foo'] 
<class __main__.Foo at 0x107eee1f0> 
>>> classmap['foo']() 
<__main__.Foo instance at 0x107eefcb0> 

注意duck typing完全是另一回事;將任何物體視爲正確的類型,只要它實現了您所期望的屬性和方法(如果它像鴨子一樣走動,它就是是一個鴨子)。

+0

謝謝!我剛剛搞亂了班級地圖和班級定義的順序。 – SverkerSbrg