2009-12-02 11 views
16

W Pythonie 3.1, pojawiła się nowa funkcja wbudowanego nie wiem w module builtins:Co robi wbudowany w Python __build_class__?

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

    Internal helper function used by the class statement. 

Co to funkcja zrobić? Dlaczego musi być wbudowany, jeśli jest wewnętrzny? Jaka jest różnica w funkcji type(name, bases, dict)?

Odpowiedz

18

Kompilacja PEP 3115 metaklasa

Guido van Rossum said:

PEP proponuje, że oświadczenie klasa przyjmuje argumentów słów kluczowych, *args i **kwds składni, jak również baz pozycyjnych. To jest trochę niechlujne do kompilacji i wykonania, ale już mamy mieć to, oczywiście, w kodzie dla wywoływanie zwykłych funkcji.

Więc myślę, że to byłoby do przyjęcia dla tym do wywołania nowego (ukryty) wbudowaną funkcję o nazwie __build_class__. Potem, że definicja ta klasa:

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

przełoży się to:

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

gdzie <func> jest obiektem funkcja korpus klasy.

+0

Co to jest "obiekt funkcji dla ciała klasowego"? – DeFazer

+0

Możesz znaleźć te informacje w przykładowym kodzie w połączonym poście z Guido van Rossum. '__build_class__' wywoła coś takiego jak' locals = {}; func (locals) '. Oznacza to, że dla klasy "klasa X: y = 1", odpowiednia funkcja ciała '' będzie: 'def func (locals): locals.y = 1' – daluege