Что делает встроенный в Python __build_class__?

В Python 3.1 есть новая встроенная функция, которую я не знаю в модуле builtins:

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

    Internal helper function used by the class statement.

Что делает эта функция? Почему он должен быть встроенным, если он внутренний? В чем отличие от функции type(name, bases, dict)?


person u0b34a0f6ae    schedule 02.12.2009    source источник


Ответы (1)


Компиляция метакласса PEP 3115

Гвидо ван Россум сказал:

PEP предлагает, чтобы оператор класса принимал аргументы ключевого слова, синтаксис *args и **kwds, а также позиционные базы. Это немного запутанно для компиляции и выполнения, но у нас это уже есть, конечно, в коде для вызова обычных функций.

Поэтому я думаю, что это было бы приемлемо для вызова новой (скрытой) встроенной функции с именем __build_class__. Тогда это определение класса:

  class C(A, B, metaclass=M, other=42, *more_bases, *more_kwds):
    ...

переведет в это:

  C = __build_class__(<func>, 'C', A, B, metaclass=M, other=42,
*more_bases, *more_kwds)

где <func> — объект функции для тела класса.

person CodeJoust    schedule 02.12.2009
comment
Что такое функциональный объект для тела класса? - person DeFazer; 03.12.2016
comment
Вы можете найти эту информацию в примере кода в связанном сообщении от Guido van Rossum. __build_class__ будет вызывать что-то вроде locals = {}; func(locals). То есть для класса class X: y = 1 эквивалентной функцией тела <func> будет: def func(locals): locals.y = 1 - person filip; 21.01.2017