__metaclass__ 在使用 type("Test", (Base,), {'__metaclass__':Meta, ...}) 创建 class 时无效

__metaclass__ not worked when create class with type("Test", (Base,), {'__metaclass__':Meta, ...})

cls = type("Test", (Base,), {"__metaclass__": Meta, "a": 1, ...})

我想用 Meta class 检查第三个参数中的属性,但这似乎不起作用,还有其他方法吗?

Meta-class 是 type 的子 class。所以创建一个 metaclass 的类型就是调用 meta class:

cls = Meta("Test", (Base,), {"a": 1, ...})

您应该通过调用 Meta (a.k.a.type.__class__.__new__(Meta, "Test", (Base,), {"__metaclass__": Meta, "a": 1}).

创建您的 Test class

如果你有可能__metaclass__的字典,你可以使用下面的代码:

members = {"__metaclass__": Meta, "a": 1, ...}  
metaclass = members.pop('__metaclass__', type)
cls = metaclass("Test", (Base,), members)