如何解决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")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。