2009-12-02 11 views
16

En Python 3.1, hay una nueva función incorporada que no sé en el módulo builtins:¿Qué hace la versión de __build_class__ de Python?

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

    Internal helper function used by the class statement. 

¿Qué hace esta función? ¿Por qué debe estar en builtins si es interno? ¿Cuál es la diferencia con la función type(name, bases, dict)?

Respuesta

18

Compilación del PEP 3115 metaclase

Guido van Rossum said:

El PPE propone que la declaración de clase acepta argumentos de palabra clave, *args y **kwds sintaxis, así como bases de posición. Esto es un poco complicado para compilar y ejecutar, pero ya tenemos tenemos esto, por supuesto, en el código para llamando a funciones regulares.

así que creo que sería aceptable para esto en una llamada a una nueva función incorporada (oculto), llamado __build_class__. Luego de que esta definición de clase:

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

se traduciría en esto:

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

donde <func> es un objeto de función para el cuerpo de la clase.

+0

¿Qué es el "objeto de función para el cuerpo de clase"? – DeFazer

+0

Puede encontrar esta información en el ejemplo del código en la publicación vinculada de Guido van Rossum. '__build_class__' llamará algo así como' locals = {}; func (lugareños) '. Es decir, para una clase 'clase X: y = 1', la función corporal equivalente' 'sería:' def func (locals): locals.y = 1' – daluege

Cuestiones relacionadas