[Python-es] declarar en una clase todas las variables en __init__() o no?

Andrey Antoukh andsux en gmail.com
Sab Ago 6 01:19:23 CEST 2011


En mi opinión, dependiendo del caso, el hecho de definir todo en el
__init__ , no es necesario, ya que puedes definirlas como atributos de
la clase. (hablando de variables claro esta...)

Hay que tener en cuenta que esos atributos se quedan asignados en el
momento de la creacion de la clase y no en el momento de creacion de
la instancia. Lo que hace que si tienes 10 variables, no tengas que
hacer 10 asignaciones por casa instancia.

Las variables que tu asignes a self desde __init__ deben ser fruto de
alguna ejecucion que solo podria ser obtenida en el momenot de
ejecucion. Y como ya te lo han comentado, si no lo necesitas usar
desde otros metodos a posteriori de la creacion de la instancia... no
la asignes a la clase. Ya que en caso de que fueran variables de poco
uso y la asignes a la clase, permaneceran en memoria hasta que la
instancia fuera eliminada por el GC, que en otro caso, en teoria
deberian ser eliminadas por el GC, una vez dejaras de necesitarlas, es
decir que acabe la ejecucion de tu metodo.

No se si me he explicado con esto ultimo, pero al menos lo he intentado :)

Andrei.

2011/8/6 Ricardo Cárdenes <ricardo.cardenes en gmail.com>:
> 2011/8/5 kldgarrido <kldgarrido en gmail.com>:
>> Hola Amigos.
>>
>> Me gustaría consultarles algo:
>>
>> A la hora implementar una clase consideran estético para python declarar
>> todas las variables que se van utilizar en "def __init__():" o declarar
>> según los métodos que la utilicen.
>>
>> por ejemplo:
>> Para crear una variable self.b que se va a imprimir por un método
>> llamado self.imprimir()
>
> El caso sería preguntarse: ¿es necesario almacenar la variable para
> usos futuros? Si es así, seguramente va a ser usada en algún otro
> método (para actualizar su valor, por ejemplo) y en ese caso es
> conveniente que esté creada desde el principio (en __init__), porque
> no se puede predecir el orden en que van a ser llamados los métodos
> que trabajan con la variable.
>
> En caso de que la variable sea de "usar y tirar", sólo dentro del
> método que la usa, ¿para qué asignarla a self?
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
http://twitter.com/andsux
http://www.niwi.be
****
http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"


Más información sobre la lista de distribución Python-es