Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
info:cursos:netacad:python:pe2m3:herencia [05/07/2022 12:22] – [Cómo Python encuentra propiedades y métodos] mateinfo:cursos:netacad:python:pe2m3:herencia [05/07/2022 12:29] (actual) – [El Problema del Diamante] mate
Línia 933: Línia 933:
 Como puedes ver, los diamantes pueden traer algunos problemas a tu vida, tanto los reales como los que ofrece Python. Como puedes ver, los diamantes pueden traer algunos problemas a tu vida, tanto los reales como los que ofrece Python.
  
 +== Puntos Clave
 +1. Un método llamado ''%%__str__%%()'' es responsable de **convertir el contenido de un objeto en una cadena (más o menos) legible**. Puedes redefinirlo si deseas que tu objeto pueda presentarse de una forma más elegante. Por ejemplo:
 +<code python>
 +class Mouse:
 +    def __init__(self, name):
 +        self.my_name = name
 +
 +
 +    def __str__(self):
 +        return self.my_name
 +
 +the_mouse = Mouse('mickey')
 +print(the_mouse)  # Imprime "mickey"
 +</code>
 +
 +2. Una función llamada //issubclass(Class_1, Class_2)// es capaz de determinar si //Class_1// es una **subclase** de //Class_2//. Por ejemplo:
 +<code python>
 +class Mouse:
 +    pass
 +
 +
 +class LabMouse(Mouse):
 +    pass
 +
 +
 +print(issubclass(Mouse, LabMouse), issubclass(LabMouse, Mouse))  # Imprime "False True"
 +</code>
 +
 +3. Una función llamada //isinstance(Object, Class)// comprueba si un objeto **proviene de una clase indicada**. Por ejemplo:
 +<code python>
 +class Mouse:
 +    pass
 +
 +
 +class LabMouse(Mouse):
 +    pass
 +
 +
 +mickey = Mouse()
 +print(isinstance(mickey, Mouse), isinstance(mickey, LabMouse))  # Imprime "True False".
 +</code>
 +
 +4. Un operador llamado //is// comprueba si dos variables hacen referencia **al mismo objeto**. Por ejemplo:
 +<code python>
 +class Mouse:
 +    pass
 +
 +
 +mickey = Mouse()
 +minnie = Mouse()
 +cloned_mickey = mickey
 +print(mickey is minnie, mickey is cloned_mickey)  # Imprime "False True".
 +</code>
 +
 +5. Una función sin parámetros llamada //super()// retorna la **referencia a la superclase más cercana de la clase**. Por ejemplo:
 +<code python>
 +class Mouse:
 +    def __str__(self):
 +        return "Mouse"
 +
 +
 +class LabMouse(Mouse):
 +    def __str__(self):
 +        return "Laboratory " + super().__str__()
 +
 +
 +doctor_mouse = LabMouse();
 +print(doctor_mouse)  # Imprime "Laboratory Mouse".
 +</code>
 +
 +6. Los métodos, así como las variables de instancia y de clase definidas en una superclase son **heredados automáticamente** por sus subclases. Por ejemplo:
 +<code python>
 +class Mouse:
 +    Population = 0
 +    def __init__(self, name):
 +        Mouse.Population += 1
 +        self.name = name
 +
 +    def __str__(self):
 +        return "Hola, mi nombre es " + self.name
 +
 +class LabMouse(Mouse):
 +    pass
 +
 +professor_mouse = LabMouse("Profesor Mouse")
 +print(professor_mouse, Mouse.Population)  # Imprime "Hola, mi nombre es Profesor Mouse 1"
 +</code>
 +
 +7. Para encontrar cualquier propiedad de objeto/clase, Python la busca dentro:
 +
 +  * Del objeto mismo.
 +  * Todas las clases involucradas en la línea de herencia del objeto de abajo hacia arriba.
 +  * Si existe más de una clase en una ruta de herencia en particular, Python las escanea de izquierda a derecha.
 +  * Si lo mencionado anteriormente falla, la excepción //AttributeError// es generada.
 +
 +8. Si alguna de las subclases define un método, variable de clase o variable de instancia del mismo nombre que existe en la superclase, el nuevo nombre **anula** cualquiera de las instancias anteriores del nombre. Por ejemplo:
 +<code python>
 +class Mouse:
 +    def __init__(self, name):
 +        self.name = name
 +
 +    def __str__(self):
 +        return "Mi nombre es " + self.name
 +
 +class AncientMouse(Mouse):
 +    def __str__(self):
 +        return "Meum nomen est " + self.name
 +
 +mus = AncientMouse("Caesar" # Imprime "Meum nomen est Caesar"
 +print(mus)
 +</code>
  • info/cursos/netacad/python/pe2m3/herencia.1657048946.txt.gz
  • Darrera modificació: 05/07/2022 12:22
  • per mate