Python:动态创建类,同时为__init__subclass __提供参数

问题描述

如何动态创建类的子类并为其__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

但是当使用元类动态创建my_name的子类时,如何传递MyClass?通常我可以使用type(),但是它没有提供my_name的选项。

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

解决方法

type的基本文档没有提到它接受无限数量的仅关键字参数,您可以通过class语句中的关键字来提供这些参数。唯一暗示这一点的地方是Creating the class object部分的数据模型:

通过执行类主体填充了类名称空间后,将通过调用metaclass(name,bases,namespace,**kwds)创建类对象(此处传递的其他关键字与传递给__prepare__的关键字相同)。

通常,由于__init_subclass__,您不会将type与此功能一起使用:

默认实现object.__init_subclass__不执行任何操作,但是如果使用任何参数调用它都会引发错误。

由于您已覆盖默认实现,因此可以将动态类创建为

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...