Foros del Web » Programando para Internet » Python »

Parametro self en python dudas.

Estas en el tema de Parametro self en python dudas. en el foro de Python en Foros del Web. hola Tengo una duda con SELF. Veamos un ejemplo que estoy estudiando desde una pagina online. Implementaremos una clase llamada Persona que tendrá como atributo ...
  #1 (permalink)  
Antiguo 13/12/2011, 23:16
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 10 años, 7 meses
Puntos: 2
Parametro self en python dudas.

hola Tengo una duda con SELF.

Veamos un ejemplo que estoy estudiando desde una pagina online.

Implementaremos una clase llamada Persona que tendrá como atributo (variable) su nombre y dos métodos (funciones), uno de dichos métodos inicializará el atributo nombre y el siguiente método mostrará en la página el contenido del mismo.
Código PHP:
class Persona# esta es la clase
    
def inicializar(self,nom): 
        
self.nombre=nom

    def imprimir
(self):
        print 
'Nombre:'
        
print self.nombre
        
print '<br>'

persona1=Persona()
persona1.inicializar('Juan')
persona1.imprimir()

persona2=Persona()
persona2.inicializar('Ana')
persona2.imprimir() 
La definicion que dan sobre el parametro SELF:
Como veremos todo método tiene como primer parámetro el identificador self que tiene la referencia del objeto que llamó al método.

Le he echado cabeza pero en realidad no se para que existe el parametro SELF, me pueden dar una mana sin salirse de el grado de dificultad, gracias.
  #2 (permalink)  
Antiguo 14/12/2011, 12:20
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 13 años, 1 mes
Puntos: 1485
Respuesta: Parametro self en python dudas.

buenas,
así es como funciona el modelo de clase de python. los métodos de las clases siempre reciben como primer parámetro el objeto (la instancia de la clase). cuando se invoca desde una instancia, python automaticamente provee ese parámetro. nótese que no es lo mismo si invocaras el método desde la clase. es decir, Persona.inicializar("Ana"). en ese caso python levanta un error porque require dos parámetros. el por qué lo hicieron así, no sé -apenas comence con python. en fin, el parámetro self -que en realidad no tiene porque tener ese identificador, incluso puede ser this o cualquier otro- es para hacer referencia a la instancia u objeto dentro del método.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 14/12/2011, 16:21
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 11 años, 11 meses
Puntos: 310
Respuesta: Parametro self en python dudas.

Hola @zerokilled! () Su explicación no puedo mejorarla, si es que se ha dejado algo tendremos que esperar a que vengan los expertos Lo que sí te diré es que, por el br, deduzco que estás haciendo HTML y algo a nivel web. Si es así te recomiendo que uses Django, hacer una web en Python a pelo tiene que ser mortal de necesidad D:
pseudo-offtopic: No lo había pensado, pero es cierto lo de self y this. Me gusta más this porque estoy acostumbrado a ello en JS, pero supongo que por convención será mejor usar self >.< Además si usas el mismo identificador podrías confundir aspectos de uno y otro lenguaje, por lo menos en mi caso estoy seguro de que acabaría haciéndolo XD
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 14/12/2011, 16:39
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Parametro self en python dudas.

Se trata simplemente de una referencia al objeto cuyo método es llamado. El nombre es convencional, puede ser cualquier cosa pero se recomienda por consistencia.

A grandes rasgos es como si la llamada a

objeto.metodo(parametro)

se tradujera a algo como

Clase_del_objeto(objeto, parametro)

Una buena descripción por acá:
http://stackoverflow.com/questions/1...und-and-static
  #5 (permalink)  
Antiguo 14/12/2011, 17:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 2 meses
Puntos: 1360
Respuesta: Parametro self en python dudas.

Solo para concluir self no solo es parte del modelo de POO (Programación Orientada a Objetos).

También aparece en java y C++ como this, y en muchos otros lenguajes que tenga soporte para POO.

self internamente es un puntero a si mismo (por eso se llama self o this).

Y como dato final self, es simplemente una convención la verdad puedes llamarlo como tu quieras pero te recomiendo que lo dejes así.
  #6 (permalink)  
Antiguo 14/12/2011, 17:50
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 10 años, 7 meses
Puntos: 2
Respuesta: Parametro self en python dudas.

Que dicha que tenemos programadores con deseo de compartir. Muchas gracias.
  #7 (permalink)  
Antiguo 15/12/2011, 08:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 3
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Parametro self en python dudas.

Creo que ya explicaron todo bastante bien, pero van un par de aportes:

Aunque al principio sea poco intuitivo tener que declarar explicitamente el objeto sobre el que vas a operar dentro del metodo, creo que el por que de esta eleccion era para simplificar el funcionamiento interno de python. No hay nada que el interprete tenga que deducir o adivinar, al llamar a un metodo de una instancia, en realidad llama a Clase.metodo(instancia, args).

Una funcionalidad extra que te permite este funcionamiento es agregar metodos a una instancia ya existente. Si bien no es una practica muy prolija puede ser de mucha utilidad en ciertos casos.

Por ejemplo:

Código Python:
Ver original
  1. class Persona(object):
  2.     def __init__(self, name):
  3.         self.name = name
  4.  
  5.     def __str__(self):
  6.         return self.name
  7.  
  8.  
  9. def saludo(obj, saludo='Hola'):
  10.     return saludo + ', ' + str(obj)

Ahi tenemos una clase, y una funcion que genera un saludo para un objeto que le pasas.

Podrías usarlo asi:
Código Python:
Ver original
  1. p = Persona('Jose')
  2. print saludo(p1)

Pero tambien podes hacer:
Código Python:
Ver original
  1. Persona.saludo = saludo
  2. p.saludo()

y tendrias el mismo resultado


Esto te permite remplazar ciertos metodos en casos especificos, por ejemplo:

Código Python:
Ver original
  1. >>> class Persona(object):
  2. ...     def __init__(self, name):
  3. ...             self.name = name
  4. ...     def save(self):
  5. ...             print 'saving to db'
  6. ...
  7. >>>
  8. >>> def save_to_file(obj):
  9. ...     print 'saving to file'
  10. ...
  11. >>>
  12. >>> p = Persona('Maria')
  13. >>> p.save()
  14. saving to db
  15. ...
  16. >>> Persona.aux = Persona.save
  17. >>> Persona.save = save_to_file
  18. >>> p.save()
  19. saving to file
  20. >>> Persona.save = Persona.aux
  21. >>> del(Persona.aux)
  22. >>> p.save()
  23. saving to db
  24. >>>


Bueno, espero que a alguien se le ocurra un buen uso para esto, y a no abusar ya que despues el codigo no lo mantiene ni cadorna.

Etiquetas: parametro
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 21:01.