【问题标题】:specify metaclass for dynamic type为动态类型指定元类
【发布时间】:2021-10-25 03:58:55
【问题描述】:

在 Python 中,您可以使用函数 my_type = type(name, bases, dict) 动态创建类型。你将如何为这种类型my_type 指定一个元类? (理想情况下,除了定义一个简单地将元类绑定到实例化子类的一次性 class 对象)

【问题讨论】:

  • 这有点令人困惑,因为type 像这样调用一个元类。如果你有一些其他的元类,它将是type 的子类,可能还有它自己的__new__()。如果你想要一个 that 类型的类,你只需按照你制作这个的方法制作一个:some_meta(name, bases, dict).
  • @Mark 不正确 - 这将跳过正确解析元类基础的步骤。
  • 嗯,我相信你是对的@wim。但是想出一个具体的例子时遇到了麻烦。
  • @Mark 在PEP 560中给出了一个具体的例子。
  • 实际上只是阅读想法this source 这很清楚。谢谢@wim。

标签: python metaclass


【解决方案1】:

对于Dynamic Type Creation,您需要在类语句中提供关键字(包括但不限于关键字“元类”),您可以使用types.new_class。下面的类定义:

class A(B, C, metaclass=AMeta):
    pass

可以像这样动态创建:

A = types.new_class(
    name="A",
    bases=(B, C),
    kwds={"metaclass": AMeta},
    exec_body=None,
)

这比直接调用type 或任何其他元类更可取,因为它解析了元类基 - 取决于BC 的类型,type(A) 这里是might not necessarily be AMeta

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2021-06-18
    • 2019-10-14
    • 2012-07-11
    相关资源
    最近更新 更多