2011-06-29 19 views
7

Al agregar la clase de modelo a models.py en Django, ¿por qué no usamos self con las variables de campo que definimos? No debería ser que el uso de variables de campo propio los convierte en variables de clase, lo que "puede" causar un problema.Usando self en Django Clases de modelo

+0

... ¿qué? ¿Puedes agregar un par de ejemplos de lo que quieres decir? Porque no estoy seguro de que te sigo ... – eternicode

Respuesta

8

Django usa metaclasses para crear la clase real en función de la definición de clase que proporcione. En resumen, al crear una instancia de su clase de modelo, la metaclase se ejecutará a través de las definiciones de campo de su modelo y devolverá una clase correspondiente con los atributos apropiados.

Para responder a su pregunta directamente, el uso de variables de clase en lugar de variables de instancia (object.self) permite que la metaclase inspeccione los atributos de clase sin tener que crear una instancia primero.

Para obtener más información, echar un vistazo a the source y los siguientes documentos:

+1

Me hice una pregunta similar hace 4 años, así que me metí en el código 'django/db'. Fue esclarecedor en varios niveles; es una especie de clase maestra en el uso de metaclases. –

Cuestiones relacionadas