如何动态创建类的子类并为其__init_subclass__()
方法提供参数?
示例类:
class MyClass:
def __init_subclass__(cls, my_name):
print(f"Subclass created and my name is {my_name}")
通常我会这样实现我的子类:
class MySubclass(MyClass, my_name="Ellis"):
pass
但是,当使用元类动态创建MyClass
的子类时,如何传入my_name
呢?通常我可以使用type()
,但它没有提供my_name
的选项。
MyDynamicSubclass = type("MyDynamicSubclass", (MyClass,), {})
1条答案
按热度按时间1sbrub3j1#
type
的基本文档没有提到它接受无限数量的仅关键字参数,您可以通过class
语句中的关键字提供这些参数。唯一的提示是在创建类对象一节中的数据模型中:一旦通过执行类主体填充了类名称空间,就通过调用
metaclass(name, bases, namespace, **kwds)
创建了类对象(这里传递的附加关键字与传递给__prepare__
的相同)。通常情况下,您不会在
type
中使用此功能,这完全是因为__init_subclass__
:默认实现
object.__init_subclass__
什么也不做,但如果使用任何参数调用它,就会引发错误。由于您已经重写了默认实现,因此可以将动态类创建为