Python 通过引用实例化类

Python 通过引用实例化类,python,Python,我想创建一个字典,它基于字符串关键字返回Foo的一个子类,我可以稍后实例化它。这是可能的还是解决问题的方法不正确 伪代码: subclasses_of_foo = {"foo1": Foo1, "foo2": Foo2} subclass_of_foo = subclasses_of_foo["foo1"] instance = subclass_of_foo() 当然,你能做到。试一试。你的方法完全正确而且有效。类只是对象,就像Python中的其他东西一样。它们可以作为值存储在字典中 演示

我想创建一个字典,它基于字符串关键字返回Foo的一个子类,我可以稍后实例化它。这是可能的还是解决问题的方法不正确

伪代码:

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

instance = subclass_of_foo()

当然,你能做到。试一试。

你的方法完全正确而且有效。类只是对象,就像Python中的其他东西一样。它们可以作为值存储在字典中

演示:

>>类Foo:
...     通过
... 
>>>分类栏:
...     通过
... 
>>>classmap={'foo':foo,'bar':bar}
>>>类映射['foo']
>>>类映射['foo']()

注意,这完全是另一回事;这是一种将任何对象视为正确类型的做法,只要它实现了您所期望的属性和方法(如果它像鸭子一样走路,那么它就是鸭子)。

不是“鸭子类型”的意思,而是可行的。您甚至可以做
instance=subclass\u of_foo[“foo1”]()
如果您喜欢,如果您将子类部分放在正确位置,是否可以使用duck键入?(只要我想调用实例化对象上的方法)谢谢!我刚刚搞乱了类映射和类定义的顺序。谢谢!我刚刚打乱了类映射和类定义的顺序。
>>> 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>