__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)
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)