【发布时间】:2016-10-03 07:32:47
【问题描述】:
cls = type("Test", (Base,), {"__metaclass__": Meta, "a": 1, ...})
我想用 Meta 类检查第三个参数中的 attrs,但这似乎不起作用,还有其他方法吗?
【问题讨论】:
-
您应该提供 MCVE stackoverflow.com/help/mcve
cls = type("Test", (Base,), {"__metaclass__": Meta, "a": 1, ...})
我想用 Meta 类检查第三个参数中的 attrs,但这似乎不起作用,还有其他方法吗?
【问题讨论】:
Meta-class 是type 的子类。所以创建一个元类的类型就是调用元类:
cls = Meta("Test", (Base,), {"a": 1, ...})
【讨论】:
您应该通过调用Meta(又名type.__class__.__new__(Meta, "Test", (Base,), {"__metaclass__": Meta, "a": 1}))来创建您的Test 类。
如果您有可能有__metaclass__ 的字典,您可以使用以下代码:
members = {"__metaclass__": Meta, "a": 1, ...}
metaclass = members.pop('__metaclass__', type)
cls = metaclass("Test", (Base,), members)
【讨论】: