Python:动态创建类,同时为__init_subclass__()提供参数

hrysbysz  于 2023-07-01  发布在  Python
关注(0)|答案(1)|浏览(89)

如何动态创建类的子类并为其__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,), {})
1sbrub3j

1sbrub3j1#

type的基本文档没有提到它接受无限数量的仅关键字参数,您可以通过class语句中的关键字提供这些参数。唯一的提示是在创建类对象一节中的数据模型中:
一旦通过执行类主体填充了类名称空间,就通过调用metaclass(name, bases, namespace, **kwds)创建了类对象(这里传递的附加关键字与传递给__prepare__的相同)。
通常情况下,您不会在type中使用此功能,这完全是因为__init_subclass__
默认实现object.__init_subclass__什么也不做,但如果使用任何参数调用它,就会引发错误。
由于您已经重写了默认实现,因此可以将动态类创建为

MyDynamicSubclass = type("MyDynamicSubclass", (MyClass,), {}, my_name="Ellis")

相关问题