2009-12-02 5 views
16

En Python 3.1, il y a une nouvelle fonction builtin Je ne sais pas dans le module builtins:Que fait la classe __build_class__ de Python?

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

    Internal helper function used by the class statement. 

Qu'est-ce que cette fonction fait? Pourquoi doit-il être intégré si c'est interne? Quelle est la différence avec la fonction type(name, bases, dict)?

Répondre

18

compilacion de la PEP 3115 métaclasse

Guido van Rossum said:

Le PEP propose que la déclaration de classe accepte les arguments de mots clés, *args et **kwds syntaxe ainsi que des bases de position. C'est un peu brouillon pour compiler et exécuter, mais nous déjà l'avons, bien sûr, dans le code pour appelant des fonctions régulières.

Je pense donc qu'il serait acceptable pour cela en un appel à un nouveau (caché) fonction intégrée, nommée __build_class__. Alors que cette définition de la classe:

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

se traduirait par ceci:

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

<func> est un objet de fonction pour le corps de la classe.

+0

Qu'est-ce que "l'objet de fonction pour le corps de la classe"? – DeFazer

+0

Vous pouvez trouver cette information dans l'exemple de code dans la publication liée de Guido van Rossum. '__build_class__' appellera quelque chose comme' locals = {}; func (locaux) '. En d'autres termes, pour une classe 'classe X: y = 1', la fonction de corps équivalente' ' serait: 'def func (locals): locals.y = 1' – daluege