Cargando



Django - Atributos y Declaración de Clases

En este tutorial examinaremos como se ordenan los atributos y los métodos que se llaman al hacer una clase con la forma declarativa.


feb 16 2014 23:49
Avanzado
feb 20 2014 13:11
Django maneja la forma declarativa para establecer las clases que utilizará, esto significa que podemos crear modelos a partir de metaclases ya definidas con lo que podremos obtener funcionalidades básicas y avanzadas con tan solo hacer una clase personalizada, esto gracias a todas las herramientas incorporadas en el framework.

Uno de los puntos que tal vez nos queda al aire es como saber, la forma en la que el framework realiza las cosas, es decir en qué orden declara los atributos que colocamos en las clases.

Ordenando los atributos de clase

Cuando utilizamos la sintaxis declarativa que tenemos disponible en Django, puede surgir un punto de confusión y esto es el orden en el cual se asignan los valores declarados, la razón para esto yace en que Python maneja sus diccionarios de una forma desordenada; normalmente esto no representaría un problema mayor, sin embargo, al manejar los namespaces o espacios de nombre si necesitamos hacer una iteración en particular sobre los atributos, es importante saber el orden en el cual se le asignaron los valores, ya que sí no tendríamos un obstáculo.

Para tener el control total de nuestra aplicación, podemos de alguna forma saber cuál es el orden en el cual se realiza la asignación de valores, evitando de esta manera tener que asignar un orden de forma arbitraria.

Para lograr este ordenamiento lo que podemos realizar es que cada atributo lleve por sí mismo una traza de su posición en la secuencia, para ello debemos hacer que nuestras clases hereden de una clase base que pueda contar cuantas veces la clase es instanciada y así asignarle un numero correlativo a cada una de ellas:

class BaseAttribute(object):
creation_counter = 1
def __init__(self):
	 self.creation_counter = BaseAttribute.creation_counter
	 BaseAttribute.creation_counter += 1

Vemos en el ejemplo de código lo siguiente:

Cada instancia de Object tiene un namespace o espacio de nombres diferente que las clases, por lo que cada una de las instancias de esta clase tendrá un contador de creación que podemos utilizar para ordenar los objetos acorde al orden en que fueron instanciados.

Tal vez esta no sea la única solución al problema planteado, pero es la forma en la cual Django ordena los campos para los modelos y los formularios.

Como vemos el problema fue solo una muestra de cómo Django como framework maneja las clases y su contenido, utilizando los recursos de Python.

Declaracion de Clases

Con todas las clases que tenemos en un módulo, crear una clase aplicativa es tan simple como definir una subclase y agregar sus atributos.

Los diferentes frameworks existentes tendrán nombres diferentes para los atributos de la clase, e inclusive tendrá diferentes requerimientos para como las clases son requeridas o la forma y las combinaciones en las que deben ser aplicadas, se puede llegar al punto de tener nombres reservados que pudieran causar conflictos si se crea un atributo con dicho nombre. Estos problemas son raros ya que por buena práctica debemos evitar este tipo de situaciones en el desarrollo de un nuevo framework; la regla general es dar la mayor flexibilidad posible a los desarrolladores, con esto logramos que el framework no sea un obstáculo en vez de una ayuda.

En la siguiente imagen veremos cómo se declara la clase Contact en una aplicación en Django:


Con este simple código, nos es suficiente para permitir que el framework transmita una gran cantidad de funcionalidades a nuestro modelo, sin tener que hacer que el desarrollador tenga que manualmente ir agregándolas.

Otra cosa que debemos recordar es que esto es código Python, por lo que no debemos sentirnos limitados, ya que prácticamente cualquier código válido en Python nos servirá para extender nuestras clases.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X