Foros del Web » Programando para Internet » Python »

Dudas básicas en python

Estas en el tema de Dudas básicas en python en el foro de Python en Foros del Web. Hola Tengo algunos proyectos que quiero comenzar a hacer en python, estoy actualmente programando en Java usando POO, por lo cual pensé que no seria ...
  #1 (permalink)  
Antiguo 18/05/2011, 13:47
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Pregunta Dudas básicas en python

Hola

Tengo algunos proyectos que quiero comenzar a hacer en python, estoy actualmente programando en Java usando POO, por lo cual pensé que no seria tan complicado adaptarme a python.

De hecho python es muy sencillo, pero hay algunas cosas que no me quedan claras y espero que alguien me pueda ayudar a solventar.

Primero - los self
Usé el buscador y me tope con un tema de un usuario con la misma duda, y la respuesta me convencio, que los self son referencias a atributos de la misma clase .. como usar el this.

Pero en algunos ejemplos de codigo veo que hay la definicion de una funcion con un self como argumento ... como esta eso?

algo asi:
Código:
def miFuncion(self):
codigo
En ese caso, para que sirve el self como argumento (o parametro)..?

Segundo ...
En un [URL="http://rafuru.blogspot.com/2011/05/primeros-pasos-en-python-calculadora.html"]post de mi blog [/URL] hice un primer programa en python, una calculadora sumamente simple.. pero para ilustrarme a mi mismo la estructura de un programa o script..

En un comentario, un compañero me dijo que usara un if para que lo primero que se ejecutara sea el main(), es decir meter lo que se va a ejecutar al arrancar el programa en ese metodo y que el if cheque algo que no me queda claro.. el codigo es este:

Código Python:
Ver original
  1. def main():
  2.     '''' Comentarios de documentacion ... ''''
  3.    pass
  4.  
  5. # Lo unico que hace esta linea, es:
  6. # Si el nombre del modulo es... __main__ entonces
  7. # se ejecutara la funcion... main(), si no... pues no!.
  8. #
  9. # ¿Como que el nombre del modulo es __main__?
  10. # Cuando ejecutas este script de python
  11. # ya sea python file.py, poniendole #! /usr/env/python o /usr/bin/python, import archivo.py
  12. # el modulo tiene un nombre, y es __main__ cuando estas ejecutandolo por si mismo
  13. # es decir, NO cuando lo importas...
  14. if __name__ == "__main__":
  15.    main()

La pregunta es.. (sin mas preambulos lol) ... que es el ___name___ si bien me explica que cuando un archivo (modulo o clase) esta siendo ejecutado y no importado trae un nombre por default se llama __main__ pero en caso de que no, que valor toma __name__? ..


Y por ultimo... espero realmente no aburrirles jeje..


Es cierta mi percepcion? , que antes de ejecutar algo primero se deben definir todas las funciones? .. es decir hacer todos los def() y luego ya la ejecucion?..


Claro, es una manera poco portable y erronea de hacer las cosas, ya que lo ideal es separar las funciones en una clase y las instrucciones en otras.

Oh si, casi lo olvido, podrian explicarme mas o menos como funciona la herencia en python?

Leí el libro python para todos y dice que en realidad no existe... tampoco se pueden sobreescribir los metodos.. y que de hecho no pueden haber metodos con el mismo nombre pero con distintos parametros..

Pero no me queda muy claro como hago la herencia en una clase ..



Es todo.. espero no enfadarlos.. son dudas muy clave las que traigo por el cambio de lenguaje..

muchisimas gracias !
  #2 (permalink)  
Antiguo 18/05/2011, 15:01
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: Dudas básicas en python

Cita:
Iniciado por rafuru Ver Mensaje
Hola
Hola

Cita:
Iniciado por rafuru Ver Mensaje
Tengo algunos proyectos que quiero comenzar a hacer en python, estoy actualmente programando en Java usando POO, por lo cual pensé que no seria tan complicado adaptarme a python.
No lo es, la verdad es que es ridículamente sencillo adaptarte a python.

Cita:
Iniciado por rafuru Ver Mensaje
Primero - los self
Usé el buscador y me tope con un tema de un usuario con la misma duda, y la respuesta me convencio, que los self son referencias a atributos de la misma clase .. como usar el this.

Pero en algunos ejemplos de codigo veo que hay la definicion de una funcion con un self como argumento ... como esta eso?

algo asi:
Código:
def miFuncion(self):
codigo
En ese caso, para que sirve el self como argumento (o parametro)..?
Sirve como ambos. Pero cuando haces métodos para las clases es obligatorio que el primer parámetro sea self pero la palabra self es una convención no una obligacion.

Cita:
Iniciado por rafuru Ver Mensaje
Segundo ...
La pregunta es.. (sin mas preambulos lol) ... que es el ___name___ si bien me explica que cuando un archivo (modulo o clase) esta siendo ejecutado y no importado trae un nombre por default se llama __main__ pero en caso de que no, que valor toma __name__? ..
El nombre del modulo, mi si modulo lo llamo hola.py al importarlo __name__ toma el valor de hola.

Cita:
Iniciado por rafuru Ver Mensaje
Es cierta mi percepcion? , que antes de ejecutar algo primero se deben definir todas las funciones? .. es decir hacer todos los def() y luego ya la ejecucion?..
Si, así es. Es lo mismo que las variables, primero las inicializas y luego las usas (en python). En otros lenguajes primero las declaras y luego las usas.

Cita:
Iniciado por rafuru Ver Mensaje
Claro, es una manera poco portable y erronea de hacer las cosas, ya que lo ideal es separar las funciones en una clase y las instrucciones en otras.
??? Ok a esta no le entendí muy bien.

Cita:
Iniciado por rafuru Ver Mensaje
Oh si, casi lo olvido, podrian explicarme mas o menos como funciona la herencia en python?
Claro, funciona tal como lo esperarías que funcionara no como en java.
Código Python:
Ver original
  1. #Ejemplo de herencia simple.
  2. class Padre: #Clase padre
  3.     #Algunos atributos
  4.     a = 10
  5.     b = 20
  6.  
  7.     #Un metodo
  8.     def suma(self):
  9.         return self.a + self.b
  10.  
  11. class Hijo(Padre):
  12.     resultado = 0 #Agrego atributos
  13.     def resta(self): #Agrego metodos
  14.         self.resultado = self.a - self.b
  15.  
  16.     def suma(self): #Sobre escribo metodo
  17.         self.resultado = self.a + self.b
  18.  
  19. h = Hijo()
  20. print h.resultado
  21.  
  22. h.resta()
  23. print h.resultado
  24.  
  25. h.suma()
  26. print h.resultado

Cita:
Iniciado por rafuru Ver Mensaje
Leí el libro python para todos y dice que en realidad no existe... tampoco se pueden sobreescribir los metodos.. y que de hecho no pueden haber metodos con el mismo nombre pero con distintos parametros..
Eso es por que tenemos duck typing (Cuando veo un ave que camina como un pato y nada como pato y hace quack como un pato llamo a esa ave "pato"), parámetros opcionales, diccionarios o listas como parametros y muchas otras cosas para funciones.
  #3 (permalink)  
Antiguo 18/05/2011, 15:30
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

orale muchisimas gracias :D!!

No sabes como me has ayudado !!, la verdad me confundian mucho esas cuestiones.. ya sabes, de esas cosas que si no las entiendes sientes que estas haciendo todo mal..

por cierto
Cita:
Claro, es una manera poco portable y erronea de hacer las cosas, ya que lo ideal es separar las funciones en una clase y las instrucciones en otras.
no era una duda.. mas bien pensé en voz alta :P ..

En las clases que llevo nos hacen mucho incapié en separar las funciones (o metodos en java) de la clase que contiene el metodo main, por cuestiones de portabilidad .. y cosas así.
  #4 (permalink)  
Antiguo 19/05/2011, 11:52
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Dudas básicas en python

Hola,

Yo también vengo de Java y ando metiendome en python, como dice el compañero @razpeitia es muy sencillo adaptarte a python, con algunas cosas te darás de topes en la pared, pero por que son demasiado sencillas en python.

Ahora, sobre lo que comentabas del self, es algo similar a lo que es el this en Java, osea que sirve para hacer referencia a los atributos de la clase, por ejemplo este código java:

Código Java:
Ver original
  1. class Gato {
  2.     String nombre;
  3.    
  4.     void Gato(nombre) {
  5.         this.nombre = nombre;
  6.     }
  7. }
Es equivalente a este en python:
Código Python:
Ver original
  1. class Gato:
  2.     def __init__(self, nombre):
  3.         self.nombre = nombre
Lo de los metodos sobrecargados ya te comentó como va, pero igual, mira este código en java:

Código Java:
Ver original
  1. class Gato {
  2.     String nombre;
  3.    
  4.     void Gato() {
  5.         this.nombre = "";
  6.     }
  7.     void Gato(nombre) {
  8.         this.nombre = nombre;
  9.     }
  10. }
Igual en python:
Código Python:
Ver original
  1. class Gato:
  2.     def __init__ (self, nombre=""):
  3.         self.nombre = nombre

Bueno puede que me equivoque ya que apenas y empiezo a programar

Saludos
__________________
Grupo Telegram Docker en Español

Última edición por Carlangueitor; 21/05/2011 a las 21:07 Razón: Error de Código
  #5 (permalink)  
Antiguo 21/05/2011, 20:46
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años
Puntos: 0
Respuesta: Dudas básicas en python

Yo lo haría

Código Python:
Ver original
  1. class Gato:
  2.        def __init___(self):
  3.             self.nombre=""
  4.  
  5.        def Gato(self, nombre=""):
  6.               self.nombre=nombre
,
  #6 (permalink)  
Antiguo 21/05/2011, 21:03
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Dudas básicas en python

Ahora estoy viendo que escribí mal el código, en python la función debe llamarse __init__ :
Código Python:
Ver original
  1. class Gato:
  2.     def __init__(self, nombre=""):
  3.         self.nombre = nombre

Ya que si no da error.

Y también da error tu código SamuraiBlanco, además no es necesario hace dos métodos cuando desde uno lo puedes hacer.

Saludos
__________________
Grupo Telegram Docker en Español
  #7 (permalink)  
Antiguo 21/05/2011, 21:45
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: Dudas básicas en python

Ok ambos códigos siguen mal, pero les diré por que:

Cita:
Iniciado por Carlangueitor Ver Mensaje
Código Java:
Ver original
  1. class Gato {
  2.     String nombre;
  3.    
  4.     void Gato(nombre) {
  5.         this.nombre = nombre;
  6.     }
  7. }
"void Gato" es un método privado con el nombre de la clase, no es el constructor. El constructor es publico y no tiene tipo de retorno.


Cita:
Iniciado por Carlangueitor Ver Mensaje
Es equivalente a este en python:
Código Python:
Ver original
  1. class Gato:
  2.     def __init__(self, nombre):
  3.         self.nombre = nombre
De hecho su equivalente al código anterior sería:
Código Python:
Ver original
  1. class Gato:
  2.     def __Gato(self, nombre):
  3.         self.nombre = nombre


El único método en python que es un constructor es __init__.
  #8 (permalink)  
Antiguo 21/05/2011, 21:48
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: Dudas básicas en python

Cita:
Iniciado por SamuraiBlanco Ver Mensaje
Yo lo haría

Código Python:
Ver original
  1. class Gato:
  2.        def __init___(self):
  3.             self.nombre=""
  4.  
  5.        def Gato(self, nombre=""):
  6.               self.nombre=nombre
,
Nota que para que esto funcione tendrías que hacer algo así:
Código Python:
Ver original
  1. neko = Gato()
  2. neko.Gato('Gato')

Gato no es un constructor es un método con el mismo nombre de la clase. Solamente __init__ es el constructor.
  #9 (permalink)  
Antiguo 21/05/2011, 21:55
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Dudas básicas en python

Definitivamente me debo poner a estudiar más, ¡Gracias por las correcciones!

Saludos
__________________
Grupo Telegram Docker en Español
  #10 (permalink)  
Antiguo 21/05/2011, 22:07
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: Dudas básicas en python

Puedes empezar con Python para todos un libro bastante bueno y para mi gusto ligero para aprender python.

Cuando hayas terminado ese libro lee Dive Into Python, pero la versión en ingles. Esta libro ya esta mucho mas pesado.
  #11 (permalink)  
Antiguo 21/05/2011, 22:48
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Dudas básicas en python

Tengo el de Python para todos, aunque no lo he leído, el que leí fue el de Think Like a Computer Scientist pero ahora me leo este.

Saludos
__________________
Grupo Telegram Docker en Español
  #12 (permalink)  
Antiguo 22/05/2011, 06:11
 
Fecha de Ingreso: abril-2011
Mensajes: 83
Antigüedad: 13 años
Puntos: 8
Respuesta: Dudas básicas en python

No se ha comentado un detalle, que creo que también es importante en python, si me equivoco que alguien me corrija.
Este código:

Código Python:
Ver original
  1. if "__name__" == "__main__"":
  2.    main()

También sirve para que al importar ese código, no se ejecute todo lo que contiene a no ser que ejecutes expresamente el main().
Por favor corregidme si estoy equivocado que yo soy nuevo.

Un saludo.
  #13 (permalink)  
Antiguo 22/05/2011, 09:39
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: Dudas básicas en python

Cita:
Iniciado por redtitle Ver Mensaje
Código Python:
Ver original
  1. if "__name__" == "__main__"":
  2.    main()
Para empezar tienes una comilla demás al final.

Despues,
Código:
"__name__" == "__main__"
siempre sera falso por que estas comparando 2 cadenas.

Debe de ser
Código:
__name__ == "__main__"
Ahora aquí dejo un código para que veas la diferencia entre usar o no el if.


Código Python:
Ver original
  1. def A():
  2.     #Definicion de la funcion A
  3.     print 'a'
  4.  
  5. def B():
  6.     #Definicion de la funcion B
  7.     print 'b'
  8.  
  9. def main():
  10.     #Definicion de la funcion main
  11.     print "Main"
  12.  
  13. print "Codigo que siempre se ejecuta, sea importado o no"
  14.  
  15. if __name__ == "__main__":
  16.     #Solo se ejecuta si esta siendo ejecutado
  17.     main()
  #14 (permalink)  
Antiguo 22/05/2011, 11:58
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años
Puntos: 0
Respuesta: Dudas básicas en python

Cita:
Iniciado por Carlangueitor Ver Mensaje
Ahora estoy viendo que escribí mal el código, en python la función debe llamarse __init__ :
Código Python:
Ver original
  1. class Gato:
  2.     def __init__(self, nombre=""):
  3.         self.nombre = nombre

Ya que si no da error.

Y también da error tu código SamuraiBlanco, además no es necesario hace dos métodos cuando desde uno lo puedes hacer.

Saludos
No lo probe, estaba que me dormia anoche
  #15 (permalink)  
Antiguo 22/05/2011, 12:01
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años
Puntos: 0
Respuesta: Dudas básicas en python

Cita:
Iniciado por razpeitia Ver Mensaje
Nota que para que esto funcione tendrías que hacer algo así:
Código Python:
Ver original
  1. neko = Gato()
  2. neko.Gato('Gato')

Gato no es un constructor es un método con el mismo nombre de la clase. Solamente __init__ es el constructor.
Eso eso eso, hay que crear una instancia de la clase y luego llamar al método pasando como parámetro el nombre de nuestro minino =)
  #16 (permalink)  
Antiguo 22/05/2011, 17:53
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

Excelente!! wow, no me habia quedado clara esa comparacion del __name__ con __main __

Aunque ya me enrede con el asunto de los metodos

Segun lo que postean __init__ es el constructor de la clase, el único constructor (por lo que no hay posibilidad de que existan más constructores como en java) o no?.

alguien me podria poner un ejemplo un poco más claro sobre la sobrecarga de metodos :/ ?

En java es algo como:
Código Javascript:
Ver original
  1. public void hola(){
  2. System.out.println ("hola");
  3. }
  4.  
  5. //Metodo con un argumento
  6. public void hola(String nombre){
  7. System.out.println("Hola" + nombre);
  8. }

En python como quedaria?

Perdon, pero esque no le entendi a las correcciones de arriba :/..


Por cierto, hay una forma de documentar en Python?

En java (de nuevo) se usan /**

Y posteriormente los comentarios de documentacion dependiendo de los constructores y metodos para que en la documentacion aparesca que recibe, que regresa.

Claro, no estoy diciendo que quiero hacer lo mismo de java en python, existiran sus diferencias, pero la documentacion a mi parecer es elemental a la hora de escribir funciones.
  #17 (permalink)  
Antiguo 22/05/2011, 18:19
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Dudas básicas en python

Si no me equivoco eso quedaría así:
Código Python:
Ver original
  1. def hola (nombre=""):
  2.     print "Hola ", nombre
  3.    
  4. hola()
  5. hola("Fulanito")
Puedes poner un argumento opcional, lo cual sería la opción a la sobrecarga.

Sobre la Documentación checate esto: http://mundogeek.net/archivos/2008/0...ion-en-python/

Saludos
__________________
Grupo Telegram Docker en Español
  #18 (permalink)  
Antiguo 22/05/2011, 18:47
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

Cita:
Iniciado por Carlangueitor Ver Mensaje
Si no me equivoco eso quedaría así:
Código Python:
Ver original
  1. def hola (nombre=""):
  2.     print "Hola ", nombre
  3.    
  4. hola()
  5. hola("Fulanito")
Puedes poner un argumento opcional, lo cual sería la opción a la sobrecarga.

Sobre la Documentación checate esto: [url]http://mundogeek.net/archivos/2008/07/07/documentacion-en-python/[/url]

Saludos
Muchisimas gracias , de hecho funciona haciendo ese argumento, jeje

Aunque digamos, si yo quisiera aparte un argumento que ademas reciba la edad...

Y en una llamada a la funcion solo envio el nombre, se imprime la edad en 0..

Y si llamo la funcion con los dos argumentos se imprime el "hola", hola + nombre y hola + nombre + edad.
Código Python:
Ver original
  1. def hola (nombre="", edad=0):
  2.     print "hola",nombre
  3.     print "hola",nombre," tienes ",edad,"a;os"
  4.    
  5. def main():
  6.     hola()
  7.     hola("test")
  8.     hola("rafael",21)
  9.    
  10. main()

A lo que voy..

Si yo quiero un metodo que me reciba únicamente el nombre.. o únicamente la edad o el nombre y la edad...
Creo que entonces ahi la sobrecarga no es posible.. o si?
  #19 (permalink)  
Antiguo 22/05/2011, 20:15
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Dudas básicas en python

Desconozco si hay alguna forma de hacerlo, pero una opción sería esta:

Código Python:
Ver original
  1. def hola (nombre="", edad=0):
  2.     if edad == 0:
  3.         print "hola ",nombre      
  4.     else:
  5.         print "hola ", nombre, edad
  6.  
  7. hola()
  8. hola("Fulanito")
  9. hola("Fulanito", 21)
Haber que dice el Master @razpeitia

Saludos
__________________
Grupo Telegram Docker en Español
  #20 (permalink)  
Antiguo 22/05/2011, 20:20
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

xD muchisimas gracias, parece ser una buena solucion :P ..
  #21 (permalink)  
Antiguo 22/05/2011, 20:23
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: Dudas básicas en python

Cita:
Iniciado por rafuru Ver Mensaje
Código Python:
Ver original
  1. def hola (nombre="", edad=0):
  2.     print "hola",nombre
  3.     print "hola",nombre," tienes ",edad,"a;os"
  4.    
  5. def main():
  6.     hola()
  7.     hola("test")
  8.     hola("rafael",21)
  9.    
  10. main()

A lo que voy..

Si yo quiero un metodo que me reciba únicamente el nombre.. o únicamente la edad o el nombre y la edad...
Creo que entonces ahi la sobrecarga no es posible.. o si?
¿Tu crees?
Código Python:
Ver original
  1. def main():
  2.     hola()
  3.     hola("test")
  4.     hola("rafael",21)
  5.     hola(edad=21) #Solo edad

Como ya te dije también tenemos Duck Typing
Código Python:
Ver original
  1. def suma(a, b):
  2.     return a + b
  3.  
  4. print suma(1, 2)
  5. print suma(1, 3.0)
  6. print suma("aa", "bb")
  7. print suma([1, 2], [3, 4])
Funciona con varios tipos de datos, inclusive si no son del mismo tipo. ¿Cuantas sobre cargas tendrías que hacer para soportar algo así en Java?
  #22 (permalink)  
Antiguo 22/05/2011, 20:40
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

Cita:
Iniciado por razpeitia Ver Mensaje
¿Tu crees?
Código Python:
Ver original
  1. def main():
  2.     hola()
  3.     hola("test")
  4.     hola("rafael",21)
  5.     hola(edad=21) #Solo edad

Como ya te dije también tenemos Duck Typing
Código Python:
Ver original
  1. def suma(a, b):
  2.     return a + b
  3.  
  4. print suma(1, 2)
  5. print suma(1, 3.0)
  6. print suma("aa", "bb")
  7. print suma([1, 2], [3, 4])
Funciona con varios tipos de datos, inclusive si no son del mismo tipo. ¿Cuantas sobre cargas tendrías que hacer para soportar algo así en Java?
Hmm el concepto de duck typing lo entiendo.. pero como podria aplicarse por ejemplo al codigo que puse mas arriba :/ .. ?

jeje espero no hartar con mis preguntas pero en persona no conozco a nadie que desarrolle en python >_<
  #23 (permalink)  
Antiguo 22/05/2011, 21:00
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: Dudas básicas en python

Haría exactamente lo que hizo Carlangueitor, excepto que lo haría con None.
None sería el equivalente de null en java.
Código Python:
Ver original
  1. def gato(nombre=None, edad=None):
  2.     if nombre is None:
  3.         print "No tengo nombre"
  4.     else:
  5.         print "Hola, soy", nombre
  6.  
  7.     if edad is None:
  8.         print "y no se mi edad"
  9.     else:
  10.         print "y tengo", edad, "anios"
  11.     print
  12.  
  13. gato()
  14. gato("Garfield")
  15. gato("Don gato", 21)
  16. gato(edad=20)
  17. gato(nombre="Nyan cat", edad=10)
  18. gato(edad=15, nombre="Muai")

No te preocupes por el duck typing lo entendederas a su momento.
  #24 (permalink)  
Antiguo 22/05/2011, 21:10
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

Excelente

jeje, muchisimas gracias !!! no cabe duda que eres todo un master :D!!
  #25 (permalink)  
Antiguo 23/05/2011, 17:39
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

Tengo otra pregunta >_< y la pongo aqui para no abrir otro tema jojo

Si en un mismo paquete tengo dos archivos (en cada uno puse un modulo)

Y en un tercer archivo quiero heredar del primer modulo.. como se hace?

O no es posible?

Algo como lo que en java es:
Código Javascript:
Ver original
  1. package objetosNegocio;
  2.  
  3. /**
  4.  *Clase que contiene datos de alumno y que hereda de la clase Participante
  5.  * @author Rafael Carrillo 90465
  6.  */
  7. public class Alumno extends Participante {

En este caso Alumno es una clase y quiero heredar los metodos y atributos de Participante.. y me gustaria hacer lo mismo en python, lo que tengo (muy seguramente equivocado es esto)

Código Python:
Ver original
  1. import Participante
  2. class Alumno(Participante):
  3.    
  4.     def __init__(self,clave=None,nombre=None,email=None,semestre=None):
  5.         self.clave=clave
  6.         self.nombre=nombre
  7.         self.email=email
  8.         self.semestre=semestre
  #26 (permalink)  
Antiguo 23/05/2011, 18:13
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dudas básicas en python

No podés heredar de módulos, los módulos y clases son distintas cosas. Por eso tu código anterior está mal: estás intentando heredar de un módulo.

Saludos.

Última edición por AlvaroG; 23/05/2011 a las 18:19
  #27 (permalink)  
Antiguo 23/05/2011, 18:14
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

entonces todas las clases van en un mismo modulo!?
  #28 (permalink)  
Antiguo 23/05/2011, 18:43
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dudas básicas en python

No, eso no es necesario. Solamente hay que tener clara la diferencia entre un módulo (basicamente un archivo) y una clase (que puede estar definida en el mismo archivo o en otro).
Para ejemplificar, supongamos estos archivos:

modulo1.py:
Código Python:
Ver original
  1. class Clase1:
  2.     pass
modulo2.py:
Código Python:
Ver original
  1. class Clase2:
  2.     pass

Los siguientes ejemplos son válidos:

modulo3.py
Código Python:
Ver original
  1. import modulo2
  2. class Clase3(modulo2.Clase2):
  3.     pass
  4.  
  5. from modulo2 import Clase2
  6. class Clase4(Clase2):
  7.     pass
  8.  
  9. from modulo1 import Clase1
  10. class Clase5(Clase1, Clase2):
  11.     pass
  12.  
  13. class Clase6(modulo2.Clase2, Clase1):
  14.    pass
  #29 (permalink)  
Antiguo 23/05/2011, 19:01
Avatar de rafuru  
Fecha de Ingreso: febrero-2009
Mensajes: 33
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Dudas básicas en python

Muchisimas gracias, no conocia esa diferencia entre modulo y classe jeje se nota que soy newbie? jejeje

Etiquetas: newbie
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 17:54.