SoloCodigo

Programación Web y Scripting => Python => Mensaje iniciado por: Extrax en Sábado 5 de Junio de 2010, 10:26

Título: Las clases en python
Publicado por: Extrax en Sábado 5 de Junio de 2010, 10:26
Buenas!

Mirar, en general entiendo y controlo python, excepto orientación a objetos... :wacko: , y quería saber si hay algún tutorial dedicado solo a las clases y en general POO, ya que como he dicho ando perdido.
Por otra parte, alguien podría explicarme para que sirve el método __init__ en clases y self?   espero que me podais ayudar... saludos  :hola:
Título: Re: Las clases en python
Publicado por: RadicalEd en Sábado 5 de Junio de 2010, 14:21
Cita de: "Extrax"
Buenas!

Mirar, en general entiendo y controlo python, excepto orientación a objetos... :wacko: , y quería saber si hay algún tutorial dedicado solo a las clases y en general POO, ya que como he dicho ando perdido.
Por otra parte, alguien podría explicarme para que sirve el método __init__ en clases y self?   espero que me podais ayudar... saludos  :hola:
Checa este enlace POO en Python (http://radicalpython.blogspot.com/2010/01/poo-en-python.html), el método __init__ te sirve para instanciar las variables (que no es el constructor, el constructor es __new__) y self es una palabra cualquiera que puedes cambiar por la que tú escojas, pero es una convención usarla y será la que te ayude a controlar los métodos y atributos de la clase.

Cualquier cosa más especifica pregunta.
Título: Re: Las clases en python
Publicado por: Extrax en Domingo 6 de Junio de 2010, 15:33
Gracias por tu ayuda, pero me han surgido mas dudas (soy bastante nuevo en todo esto de la programación)

1- ¿Que significa instaciar?
2- ¿Que son los constructores __new__ y cuando se usan ?  
3- ¿Es obligatorio en una clase que la primera función sea __init__ ?
Título: Re: Las clases en python
Publicado por: RadicalEd en Domingo 6 de Junio de 2010, 16:15
Cita de: "Extrax"
Gracias por tu ayuda, pero me han surgido mas dudas (soy bastante nuevo en todo esto de la programación)

1- ¿Que significa instaciar?
2- ¿Que son los constructores __new__ y cuando se usan ?  
3- ¿Es obligatorio en una clase que la primera función sea __init__ ?

1) Instanciar es darle un valor inicial a las instancias de una clase
2) El constructor __new__ se usa cuando necesitas controlar la creación de una nueva instancia y usas __init__ cuando necesitas controlar las inicialización de una nueva instancia.
3) Sí, como te dijé antes es el instanciador de los atributos, si viste el link que te pase antes (SPAM de mi blog :P) hay una clase llamada ConexionMySQL
Código: Python
  1. class ConexionMySQL
  2.     def __init__ (self, host='', user='', password='', db=''):
  3.         self.host = host
  4.         self.user = user
  5.         self.password = password
  6.         self.db = db
  7.  

Sigue preguntando, sigue preguntando que para eso estamos.
Título: Re: Las clases en python
Publicado por: Extrax en Jueves 10 de Junio de 2010, 19:33
Edo, gracias por responderme a mis dudas, y ya me queda todo mucho mas claro. Pero mientras me aclaro en algunas cosas, otras nuevas aparecen y no las entiendo...  :wacko:  si podriais responderme a esta duda os lo agradecería mucho.

Que significa y para que se usa
Código: Python
  1. if __name__ == "__main__":
  2.  
??

lo he visto muchas veces (por ejemplo en tutoriales de PyGame) pero en las explicaciones que he encontrado no me aclaro, prodia alguien hacer un codigo sin modulos importados que contenga clases simples, para que pueda entenderlo ? si no es mucha molestia claro.... sino con una explicacion sobre ese codigo me basta.

saludos!!
Título: Re: Las clases en python
Publicado por: RadicalEd en Jueves 10 de Junio de 2010, 22:37
Todos los módulos son objetos y estos tienen un atributo __name__, este atributo depende de cómo se utiliza el módulo. Si se importa con import, __name__ es el nombre del fichero del módulo, sin la ruta al directorio ni la extensión. Pero también puede ejecutarse un módulo directamente como programa independiente, y en este caso __name__ adquiere un valor especial, __main__.
Título: Re: Las clases en python
Publicado por: Extrax en Viernes 11 de Junio de 2010, 10:12
Lo siento pero no lo entiendo :( ... podrias poner un ejemplo comparando cuando se usa y cuando no?, gracias...  :unsure:
Título: Re: Las clases en python
Publicado por: RadicalEd en Viernes 11 de Junio de 2010, 16:37
A ver cuando usas if __name__=='__main__' estás tratando de decir que si se está ejecutando desde el mismo script haga algo

Código: Python
  1. #!/usr/bin/env python
  2. #hola.py
  3.  
  4. def hola():
  5.   print 'el programa se esta ejecutando directamente'
  6.  
  7. def nohola():
  8.   print 'el programa se esta ejecutando desde otro programa'
  9.  
  10. if __name__=='__main__':
  11.   hola()
  12. else:
  13.   nohola()
  14.  
  15. #!/usr/bin/env python
  16. #print2.py
  17.  
  18. import hola
  19.  
Ejecutalos y verás la diferencia
Título: Re: Las clases en python
Publicado por: Extrax en Viernes 11 de Junio de 2010, 17:26
Muchas gracias, aora ya lo entiendo, o eso creo... :rolleyes: , si me equiboco corregirme.  
Lo que viene a ser es que si el modulo donde esta el codigo, es el principal y no tiene ningun modulo importado, __name__ es igual a  "__main__", sin embargo, si el modulo que estamos usando corre a cuenta de otro modulo que a sido importado (import hola), __name__ no es igual a "__main__" .

saludos :good:
Título: Re: Las clases en python
Publicado por: RadicalEd en Viernes 11 de Junio de 2010, 17:27
Exacto.