Foros del Web » Programando para Internet » Python »

Sobre el uso de self

Estas en el tema de Sobre el uso de self en el foro de Python en Foros del Web. Cuando uno programa clases en Python, está obligado a usar la variable/prefijo self todo el tiempo para que las cosas anden bien. Por ejemplo, en ...
  #1 (permalink)  
Antiguo 05/07/2009, 11:36
 
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 90
Antigüedad: 18 años, 10 meses
Puntos: 2
Pregunta Sobre el uso de self

Cuando uno programa clases en Python, está obligado a usar la variable/prefijo self todo el tiempo para que las cosas anden bien.

Por ejemplo, en el constructor de una clase, si quiero tener variables que van a usarse en todos los métodos de la clase, debo inicializarlas así:

self.contador = 0
self.cadena = "Hola Mundo"
self.lista_empleados = []

y así por el estilo.

Y peor aún, cuando uno invoca esas variables, debe anteponer self para que no haya problemas:

if (self.contador == 4): print(self.lista_empleados[4])

Me resulta muy MOLESTO tener que escribr self todo el tiempo.

¿Hay algún modo de evitar este uso tan hartante de self?
Añado que no puedo dejar el enfoque se clases y de self, porque estoy usando TKinter, y para que la aplicación esté bien coordinada debo usar una clase.

¿Se puede cambiar self por otro identificador, por ejemplo sssssssssself___, o bien s____, o simplemente _?

Odio la palabra self, porque me vuelve el código engorroso e ilegible, y uno de los PEPs es que la legibilidad cuenta, no?

¿Sugerencias?
  #2 (permalink)  
Antiguo 05/07/2009, 20:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Sobre el uso de self

El primer parámetro de los métodos puede ser cualquier nombre de variable. Por ejemplo:
Código Python:
Ver original
  1. class Persona
  2.     def __init__(s, nombre):
  3.         s.nombre = "nombre"
  4.  
  5. variable = Persona("Nombre")
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 06/07/2009, 00:09
 
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 90
Antigüedad: 18 años, 10 meses
Puntos: 2
Respuesta: Sobre el uso de self

OK, gracias
  #4 (permalink)  
Antiguo 06/07/2009, 11:52
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sobre el uso de self

Cita:
Iniciado por argentinator Ver Mensaje
Odio la palabra self, porque me vuelve el código engorroso e ilegible, y uno de los PEPs es que la legibilidad cuenta, no?
Discrepo. Si bien puede resultar engorroso, deja claro a qué variable te refieres, y a qué espacio de nombres pertenece esa variable.
Leyendo el código se nota a simple vista que la variable es un atributo del objeto, no una variable global, un parámetro de la función, o alguna variable de clase. Y el poder notar eso rápidamente puede aclarar errores extraños.


Saludos.
  #5 (permalink)  
Antiguo 06/07/2009, 20:01
 
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 90
Antigüedad: 18 años, 10 meses
Puntos: 2
Respuesta: Sobre el uso de self

Bueno, yo lo que quería saber era si se podía cambiarle el nombre a self, porque me molesta la palabra self, pero no tanto su sentido o utilidad.

El problema es que el código se me llena de palabras self por todos lados, y se torna engorroso.

David me mostró un ejemplo en que una simple letra s reemplaza a self, y eso es mucho mejor, porque es más breve.

Pero me sigue molestando.
La solución que adopté es usar el guión bajo _ como sustituto de la palabra self.
Después de todo, el uso de la palabra self no es más que una convención que todo el mundo copia, y no una obligación del lenguaje.

El resultado es que el código ya deje de ser un engorro desagradable, porque el signo _ casi que no agrede mis ojos cuando estoy leyendo el programa,
y por otro lado conservo la claridad en el desarrollo que AlvaroG defiende.
  #6 (permalink)  
Antiguo 06/07/2009, 20:02
 
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 90
Antigüedad: 18 años, 10 meses
Puntos: 2
Respuesta: Sobre el uso de self

Mis ejemplos quedarían así:
Cita:
Iniciado por argentinator Ver Mensaje
Cuando uno programa clases en Python, está
_.contador = 0
_.cadena = "Hola Mundo"
_.lista_empleados = []

if (_.contador == 4): print( _.lista_empleados[4] )
  #7 (permalink)  
Antiguo 06/07/2009, 23:09
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Respuesta: Sobre el uso de self

Como programador te recomiendo no hacer eso, y en python es un pecado mortal :)

Puede que tu lo veas claro ahora, y los demas no, pero dentro de un tiempo cuando abandones tu codigos y los vuelvas a retomar a ti tambien se te complicara.
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #8 (permalink)  
Antiguo 07/07/2009, 07:26
 
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 90
Antigüedad: 18 años, 10 meses
Puntos: 2
Respuesta: Sobre el uso de self

Mmmmm... Esos ''pecados'' de Python...

Nunca entendí por qué, si un lenguaje ofrece ciertas posibilidades, se establecen tantas reglas para ''coartar la libertad'' del programador.

En fin. Tendré en cuenta vuestras sugerencias... aunque no las voy a aplicar todavía.
Mirá si se vuelve una moda en todo el mundo reemplazar self por _.
Sería como una nueva religión, y así ya no tendría que obedecer normas ''morales'' ajenas.
  #9 (permalink)  
Antiguo 07/07/2009, 08:55
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Sobre el uso de self

cuando quieras hacer variables privadas sera, _.__variable_privada , sin mencionar que podrías tener problemas si quieres correr un pedazo de código en modo dinámico, puesto que _ es la ultima variable utilizada.

En python puedes hacer el código como se te pegue la gana, pero creo que respetar las algunos mandamientos a la hora de programar, demuestra tus modales de programación. Ademas deja ver parte tu persona.

Ademas los mandamientos fueron hechos para hacer al código mas legible.

Si bien self, te resulta engorroso. Es muy útil cuando lees otros códigos. Me ha tocado ver en java códigos horribles donde no sabes si están miembros de clase o no.

Por ultimo si te cuesta escribir self por que lo utilizas mucho te recomiendo que configures una hotkey donde lo inserte automagicamente self.
  #10 (permalink)  
Antiguo 07/07/2009, 13:12
 
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 90
Antigüedad: 18 años, 10 meses
Puntos: 2
Respuesta: Sobre el uso de self

No me molesta escribir self, lo que me molesta es leerlo, porque cuando estoy buscando alguna parte de mi propio código, al encontrar la palabra self por todos lados me confunde. sefl.esto, self.aquello, etc.
Me aparece en datos que paso como parámetro, en asignaciones, etc., y no me deja ver las ''verdaderas'' variables o métodos que estoy invocando.
O sea, me cuesta encontrar mis propias variables si hay tanto self por todos lados.

Eso no quiere decir que no use self. Lo vengo usando como corresponde y me da buenos resultados, lo reconozco. Me evita dolores de cabeza terribles con el manejo de objetos en TKinter (un par de veces olvidé poner self, y pude vislumbrar una puntilla de los problemas que vendrían más adelante si nunca lo usara.)

Pero la palabra self me aparece en una cantidad excesiva.
Si sólo hubiera que usar self un par de veces, estaría orgulloso de mi código bien programado orientado a objetos, pero son tantas las veces que aparece, que satura mi campo visual y me empiezo a confundir.

Cosas como _.__variable no me molestan, porque el punto que separa el primer - del restante __variable es para mí bastante visible.

Pero ahora con eso de que el signo _ tiene significados especiales en Python (cosa que no sabía, así que al menos aprendí algo nuevo de Python con toda esta discusión) ya me hace considerar que no es bueno usarlo.

Por otra parte, si eso de self es tan importante, ¿no sería mejor que fuera una palabra clave como el this de C++? En ese caso el editor de Python lo mostraría con otro color (a mí las palabras claves me aparecen en naranja) y sería más visible, a la vez que sería menos engorroso, porque se distinguirían bien los atributos variables, algo así:

self.variable

Entiendo que las reglas están por alguna razón, pero también pienso que las reglas pueden cambiarse si a los programadores les hace falta.

Y por útlimo, no sé qué es eso del "modo dinámico".
Si lo supiera a lo mejor pensaría más parecido a ustedes...

Con las demás características de Python estoy muy contento.
Es una muy buena herramienta para el programador.
Es cierto lo que dicen por ahí, que hay poca distancia entre la idea y el programa terminado.
Aprendí TKinter en apenas 3 días, y ya lo manejo más que bien.

Sólo me molesta el self...
  #11 (permalink)  
Antiguo 07/07/2009, 13:20
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sobre el uso de self

Entiendo lo que escribes y no pretendo discutir. Sin embargo...
Cita:
Iniciado por argentinator Ver Mensaje
si eso de self es tan importante, ¿no sería mejor que fuera una palabra clave como el this de C++?
self en python es equivalente a this en C++: la función de ambos es referenciar al objeto actual.


Saludos.
  #12 (permalink)  
Antiguo 07/07/2009, 14:07
 
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 90
Antigüedad: 18 años, 10 meses
Puntos: 2
Respuesta: Sobre el uso de self

Cita:
Iniciado por AlvaroG Ver Mensaje
Entiendo lo que escribes y no pretendo discutir. Sin embargo...


self en python es equivalente a this en C++: la función de ambos es referenciar al objeto actual.


Saludos.
OK, pero en C++ la palabra this es reservada y no puede cambiarse.
En Python he podido usar cualquier otro nombre en lugar de self, y todo funciona igual. Creo que si fuera una palabra reservada del lenguaje contribuiría mejor a la buena lectura de los programas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:02.