Python的内置__build_class__做什么?

u0b*_*6ae 20 python metaclass python-3.x

在Python 3.1中,我在builtins模块中有一个新的内置函数:

__build_class__(...)
    __build_class__(func, name, *bases, metaclass=None, **kwds) -> class

    Internal helper function used by the class statement.
Run Code Online (Sandbox Code Playgroud)

这个功能有什么作用?如果它是内部的,为什么必须在内置?这个type(name, bases, dict)功能有什么区别?

Cod*_*ust 23

编译PEP 3115元类

Guido van Rossum说:

该PEP建议类语句接受关键字参数, *args**kwds语法以及位置基地.这对于编译和执行来说有点混乱,但是我们已经在调用常规函数的代码中使用了它.

所以我认为这对于一个名为的新(隐藏)内置函数的调用是可以接受的 __build_class__.然后说这个类定义:

  class C(A, B, metaclass=M, other=42, *more_bases, *more_kwds):
    ...
Run Code Online (Sandbox Code Playgroud)

会转化为这个:

  C = __build_class__(<func>, 'C', A, B, metaclass=M, other=42,
*more_bases, *more_kwds)
Run Code Online (Sandbox Code Playgroud)

where <func>是类体的函数对象.

  • 什么是“类主体的函数对象”? (3认同)
  • 您可以在 Guido van Rossum 链接帖子的代码示例中找到此信息。`__build_class__` 会调用类似 `locals = {}; 的东西 函数(当地人)`。也就是说,对于类 `class X: y = 1`,等效的主体函数 `&lt;func&gt;` 将是: `def func(locals): locals.y = 1` (2认同)