【发布时间】:2020-12-07 22:48:23
【问题描述】:
如何动态创建我的类的子类并为其__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,), {})
【问题讨论】:
-
如果将关键字参数传递给参数列表末尾的
type,会发生什么?该文档暗示值得尝试:) -
例如
MyDynamicSubclass = type("MyDynamicSubclass", (MyClass,), {}, my_name='Ellis') -
@EllisPercival 是的,我认为你必须这样做
-
@MadPhysicist 哦!这完全有效!
-
@EllisPercival。谢谢你提出一个有趣的问题。我已经有一段时间没有研究元类和类创建了。
标签: python python-3.x inheritance metaprogramming metaclass