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