Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:poo

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:python:poo [2021/02/10 16:15] – [Clases] tempwininformatica:programacion:python:poo [2021/10/10 13:47] (actual) – [Recursos] tempwin
Línea 4: Línea 4:
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-En Python todo es un objeto+En Python todo es un objeto. El tipo más básico de objeto en Python es ''object''. Las clases que creemos serán subclases de ''object'', por lo que ''object'' será la superclase de todo el resto de clases.
 </WRAP> </WRAP>
  
Línea 106: Línea 106:
  
 <code python> <code python>
-gorrion = pajaro('gorrion', '20'', 'marrón')+gorrion = pajaro('gorrion', ''20'', 'marrón')
 </code> </code>
  
Línea 170: Línea 170:
 El parámetro ''self'' se utiliza para referirse al objeto que se crea, esa instancia en particular. No es obligatorio usar esa palabra, pero se utiliza por convención. El parámetro ''self'' se utiliza para referirse al objeto que se crea, esa instancia en particular. No es obligatorio usar esa palabra, pero se utiliza por convención.
  
 +==== Atributos ====
 +
 +Las propiedades de un objeto se pueden definir en cualquier sitio, pero lo recomendable es hacerlo al principio de la clase:
 +
 +<code python>
 +class Coche(object):
 +
 +    ruedas = 4
 +    
 +    def __init__(self, marca):
 +        self.marca = marca
 +</code>
 +
 +Creando un objeto y accediendo a sus propiedades:
 +
 +<code python>
 +c1 = Coche('Renault')
 +
 +print(c1.ruedas) # 4
 +</code>
 +
 +Podemos modificar las propiedades del objeto:
 +
 +<code python>
 +c1.ruedas = 6
 +
 +print(c1.ruedas) # 6
 +</code>
 ==== Métodos ==== ==== Métodos ====
  
Línea 206: Línea 234:
 # Ford # Ford
 </code> </code>
 +
 +===== Herencia =====
 +
 +La herencia es un proceso que nos permite utilizar métodos definidos en otras clases sin tener que definirlos en nuestra clase. De esta manera se comparte la funcionalidad, atributos y métodos.
 +
 +<code python>
 +class Coche(object):
 +
 +    def __init__(self):
 +        print("Acabas de crear una instancia de Coche")
 +        
 +    def arrancar(self):
 +        print("Coche arrancando...")
 +
 +    def parar(self):
 +        print("Coche parado"   
 +
 +</code>
 +
 +Creamos una clase heredada de la anterior:
 +
 +<code python>
 +class Renault(Coche):
 +
 +    def __init__(self):
 +        # Llamamos al constructor de la clase padre
 +        Car.__init__(self)   
 +
 +        print("Acabas de crear una instancia de Renault")
 +
 +</code>
 +
 +Ahora, desde la clase **Renault**, tendremos acceso también a los métodos de la clase **Coche**:
 +
 +<code python>
 +r = Renault()
 +
 +r.arrancar()
 +
 +r.parar()
 +</code>
 +
 +
 +==== Sobrescritura de métodos ====
 +
 +Si queremos redefinir algún método de la clase padre, basta con definirlo con el mismo nombre en la clase heredada y darle la funcionalidad que queramos:
 +
 +<code python>
 +class Renault(Coche):
 +
 +    def __init__(self):
 +        # Llamamos al constructor de la clase padre
 +        Car.__init__(self)   
 +
 +        print("Acabas de crear una instancia de Renault")
 +
 +    def arrancar(self):
 +        print("Arrancando el Renault")
 +</code>
 +
 +Si quisiéramos hacer referencia a un método de la clase padre, utilizamos ''super'':
 +
 +<code python>
 +(...)
 +    def arrancar(self):
 +        super().arrancar()
 +        print("Arrancando el Renault")
 +</code>
 +
 +===== Imprimir la representación de un objeto =====
 +
 +Python llama al método ''%%__%%str%%__%%'' cuando utilizamos ''print'' sobre un objeto. Por defecto, mostrará algo como:
 +
 +Si queremos decidir qué imprimirá, crearemos nosotros un método ''%%__%%str%%__%%'' en nuestra clase:
 +
 +<code python>
 +class Coordenada(object):
 +    def__init__(self, x, y):
 +        self.x = x
 +        self.y = y
 +        
 +    def __str__(self):
 +        return "<" + str(self.x) + ", " + str(self.y) + ">"
 +</code>
 +
 +<WRAP center round important 60%>
 +''%%__%%str%%__%%'' debe devolver un string
 +</WRAP>
 +
 +==== Operadores especiales ====
 +
 +Hay una serie de operadores que al utilizarlos en Python, llama a ciertos métodos de los objetos:
 +
 +^ Método                 ^ Operador ^
 +| ''%%__%%add%%__%%''     | ''self + other''  |
 +| ''%%__%%sub%%__%%''     | ''self - other''  |
 +| ''%%__%%eq%%__%%''      | ''self == other''  |
 +| ''%%__%%lt%%__%%''      | ''self < other''  |
 +| ''%%__%%len%%__%%''     | ''len(self)''  |
 +| ''%%__%%str%%__%%''     | ''print(self)''  |
 +
 +
 +  * https://docs.python.org/3/reference/datamodel.html#basic-customization
 +
 +===== Recursos =====
 +
 +  * [[https://www.youtube.com/watch?v=-DP1i2ZU9gk|8. Object Oriented Programming]] (YouTube)
informatica/programacion/python/poo.1612970122.txt.gz · Última modificación: por tempwin