小编Hen*_*hia的帖子

Python 元类中的继承是如何工作的?

假设我有一个自定义元类和一个链接到它的类:

class Meta(type): pass
class A(metaclass=Meta): pass
Run Code Online (Sandbox Code Playgroud)

据我了解,在语句末尾class A,执行以下步骤:

  1. 称呼Meta('A', (), {})
  2. 因为步骤 1 是内置调用,这意味着type.__call__(...)将被调用。这是因为type链接到了Meta.__class__.
  3. type.__call__(...)依次运行另外两个方法( a__new__和 a __init__)。
  4. 如果Meta定义了这两个方法中的一个或两个,那么这些方法内部type.__call__将被调用为Meta.__new__(...)and/or Meta.__init__(...)
  5. A已创建并链接到Meta( A.__class__)。

现在,假设我有一个子类A

class Meta(type): pass
class A(metaclass=Meta): pass
class B(A): pass
Run Code Online (Sandbox Code Playgroud)

在陈述的最后class B,下列步骤是否正确?

  1. 调用type('B', (), {})而不是Meta,因为B.__class__type
  2. 调用type.__call__(...)它依次运行另外两个方法(__new__ …

python inheritance metaclass python-3.x python-3.9

4
推荐指数
1
解决办法
1777
查看次数

标签 统计

inheritance ×1

metaclass ×1

python ×1

python-3.9 ×1

python-3.x ×1