我想創建一個基於字符串關鍵字的字典返回Foo的子類,我可以稍後實例化。這是可能的還是對問題的解決方法不正確?通過引用實例化類
僞代碼:
subclasses_of_foo = {"foo1": Foo1, "foo2": Foo2}
subclass_of_foo = subclasses_of_foo["foo1"]
instance = subclass_of_foo()
我想創建一個基於字符串關鍵字的字典返回Foo的子類,我可以稍後實例化。這是可能的還是對問題的解決方法不正確?通過引用實例化類
僞代碼:
subclasses_of_foo = {"foo1": Foo1, "foo2": Foo2}
subclass_of_foo = subclasses_of_foo["foo1"]
instance = subclass_of_foo()
您的方法是完全正確的,並有效。類只是對象,就像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完全是另一回事;將任何物體視爲正確的類型,只要它實現了您所期望的屬性和方法(如果它像鴨子一樣走動,它就是是是一個鴨子)。
謝謝!我剛剛搞亂了班級地圖和班級定義的順序。 – SverkerSbrg
不是什麼「鴨打字」的意思,但耶是有效的。 –
如果你喜歡 – svvac
你甚至可以做'instance = subclasses_of_foo [「foo1」]()'如果你刪除子類部分,它是鴨子打字嗎? (只要我打算在實例化對象上調用方法) – SverkerSbrg