Ejercicio 2, Practicando la Poo.

Hola a tod@s, bueno, ya deberíais saber las principales características de la Poo en python, ahora falta practicar, en esta ocasión voy a proponer un ejercicio un poco mas complejo que el anterior pero que, si habéis ido siguiendo el blog, os resultara sencillo.


El ejercicio consiste en crear una clase llamada persona, que va a tener como atributos "nombre" y "edad", con dos métodos, uno para obtener el nombre (que lo imprima por pantalla) y otro para obtener la edad, y después una clase llamada alumno, que aparte de tener una edad y un nombre como la clase persona, también va a tener el atributo "nota" con un método para obtener la nota.

Con esto repasáis sobre todo la herencia, suerte y hasta el próximo post.

Un saludo.

13 comentarios:

Dr Coloso dijo...

class persona(): # clase persona
... def __init__(self,nombre,edad): # se inicializa con nombre y edad
...... self.nombre=nombre
...... self.edad=edad
... def obtener_nombre(self):#metodo obtener_nombre
...... print self.nombre #imprime nombre
... def obtener_edad(self): #metodo obtener_edad
...... print self.edad #imprime edad

class alumno(persona): #clase alumno
... def __init__(self,nota,nombre,edad): #inicializamos con nota, con nombre y edad (las pedimos prestadas a persona)
...... persona.__init__(self,nombre,edad) #inicializamos la clase persona con nombre y edad
...... self.nota=nota
... def obtener_nota(self):#metodo obtener_nota
...... print self.nota # imprimimos nota

coloso = alumno(10,"Colosin",66) #nota nombre edad como usamos en el __init__ de alumno
coloso.obtener_edad() # usamos un metodo de la clase persona
coloso.obtener_nombre() # usamos un metodo de la clase persona
coloso.obtener_nota() # usamos un metodo propio de la clase alumno

PD aca dejo el codigo en pastebin tambien.
http://pastebin.com/3Xs0QHSK

Francisco Dominguez Lerma dijo...

Muy bien Coloso, has entendido perfectamente la POO y la herencia que es algo que ha mucha gente le cuesta entender, muy bien, te felicito, esta perfecto y muy claro.

Pd: El error del código del tutorial de herencia ya esta arreglado, he corregido el código en el post.

Dr Coloso dijo...

Me cuesta entender la clase alumno como usa el __init__ del la clase persona, pero viendo el ejemplo de la clase servivo me quedo mas claro. Ahora falta practicar mas para afianzar conceptos.
Saludos.

Francisco Dominguez Lerma dijo...

Mira, esa linea sirve para obtener los métodos de la clase persona, por que si no, los perdería, ya que creamos un nuevo constructor.

Dr Coloso dijo...

Te dejo un script que me sirvio a entender un poco mas la POO.

http://pastebin.com/5VmFynCx

Francisco Dominguez Lerma dijo...

Gracias Dr Coloso, le he echado un ojo y esta muy bien el ejemplo, gran aporte, saludos.

Dan dijo...

podrias explicármelo más de cerca, no lo entiendo muy bien.
gracias, Francisco

Francisco Dominguez Lerma dijo...

Mira, cuando creamos una clase que hereda de otra, hereda todos sus métodos, incluido el constructor, entonces, como también hereda el constructor, hereda todos sus atributos, pero no puedes añadir ninguno mas, para solucionar esto, la clase que hereda tiene su propio método constructor, que va a tener como atributos, los mismos que la clase padre, mas el que quieras añadirle, pero, claro, si hacemos un constructor nuevo, perdemos todos los atributos de la clase padre, para arreglar eso llamamos al constructor de la clase padre con: persona.__init__(self,nombre,edad)

De esa forma obtenemos los métodos nombre y edad de la clase padre, mas nota que ya a sido definida en el constructor de la clase alumno.

Espero que se te haya aclarado un poco la duda, saludos.

Unknown dijo...

Genial al ultima explicacion del comentario.

Por cierto que es eso del PASTEBIN?? Vamos soy un profano. Sólo programo por ocio. Lo hago de pena pero le pongo ganas. jejeje Y por supuesto Python es lo mas jugeton que he visto. Un saludo.

Francisco Dominguez Lerma dijo...

Hola Vari, gracias pasarte y comentar, Pastebin, es un sitio web donde podemos pegar nuestros códigos y guardarlos, la diferencia entre ponerlo en pastebin o comentarlo aquí directamente, está en que en pastebin te colorea el código, haciendo mas sencilla su lectura.

Un saludo, gracias por pasarte y bienvenido al blog.

Tuus dijo...

Pues por aquí sigo. Ademas de Python he aprendido que es eso de pastebin.

Así que lo uso también

http://pastebin.com/iPMpDwNm

Es muy parecido a lo que hico Dr Coloso en su día.

Pero prometo que lo hice sin mirar jejejejeje.

Tuus dijo...

Por cierto en el ejemplo extra que enlazó Dr Coloso, aparece lo siguiente:

Instrumento.__init__(self,precio) #Inicializamos Instrumento
self.precio=precio

La segunda linea, ¿no sobraría?.

Francisco Dominguez Lerma dijo...

Hola Tuus, antes de nada, gracias por comentar y por pasarte por el blog.

En cuanto a tu pregunta sobre el código:

Instrumento.__init__(self,precio):
self.precio=precio

Para nada sobra la segunda línea, es muy importante esa linea, ya que si no, el argumento precio solo se podría usar en el constructor y no en el resto de métodos de la clase, por eso es importante asociar el argumento local "precio" al argumento global self, que pertenece a toda la clase, en este caso se ha definido como "self.precio", pero se podría haber usado otro como "self.dinero", aunque por claridad se suele usar el mismo identificador.

Después en el resto de métodos, solo tienen que obtener el argumento self, y ya esta, así todos los argumentos que se declaran al crear el objeto, pueden ser accedidos desde todos los métodos, por lo tanto, es muy importante.

Te animo a que vuelvas a leer el tutorial de orientación a objetos:

Tutorial de orientación a objetos