【问题标题】:__metaclass__ not worked when create class with type("Test", (Base,), {'__metaclass__':Meta, ...})__metaclass__ 在使用 type("Test", (Base,), {'__metaclass__':Meta, ...}) 创建类时不起作用
【发布时间】:2016-10-03 07:32:47
【问题描述】:
cls = type("Test", (Base,), {"__metaclass__": Meta, "a": 1, ...})

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

【问题讨论】:

标签: python metaclass


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您应该通过调用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-04
      • 2019-09-27
      • 2014-09-29
      • 2010-10-23
      • 1970-01-01
      • 2019-02-15
      • 2013-11-12
      • 2016-12-25
      相关资源
      最近更新 更多