【发布时间】:2018-12-13 04:48:48
【问题描述】:
我正在尝试将类的类型传递给方法,以便可以动态实例化它。该类扩展到一个基类,该基类进一步扩展到一个抽象类。现在,当我检查我的类的类型时,它是抽象类类型而不是子类。
这是我的课程的样子
class AMeta(type):
# stuff
class Parent(six.with_metaclass(AMeta, object)):
# stuff
class Child(Parent):
# stuff
现在当我使用type(Child) or Child.__class__ 时,它给了我AMeta,而我想得到Child。我想将此 Child 传递给另一个可以动态创建其对象的方法。
def create_obj(clzz):
return clzz()
当我调用 create_obj(type(Child)) 之类的方法时,它不起作用并中断,但是当我调用 Child.mro()[0] 时,它工作正常,这里发生了什么,还有另一种方法可以通过 mro 方法实现我的目标吗?
【问题讨论】:
-
所以你想要
create_obj(Child)?是这样吗?我理解对了吗? (Child.mro()[0]是Child。) -
是的,我只想这样做,我也可以使用 type(name, bases, dict) 动态创建类,但我更喜欢第一种方法。
标签: python inheritance metaclass method-resolution-order six