Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
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] mate | info: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 '' | ||
+ | <code python> | ||
+ | class Mouse: | ||
+ | def __init__(self, | ||
+ | self.my_name = name | ||
+ | |||
+ | |||
+ | def __str__(self): | ||
+ | return self.my_name | ||
+ | |||
+ | the_mouse = Mouse(' | ||
+ | print(the_mouse) | ||
+ | </ | ||
+ | |||
+ | 2. Una función llamada // | ||
+ | <code python> | ||
+ | class Mouse: | ||
+ | pass | ||
+ | |||
+ | |||
+ | class LabMouse(Mouse): | ||
+ | pass | ||
+ | |||
+ | |||
+ | print(issubclass(Mouse, | ||
+ | </ | ||
+ | |||
+ | 3. Una función llamada // | ||
+ | <code python> | ||
+ | class Mouse: | ||
+ | pass | ||
+ | |||
+ | |||
+ | class LabMouse(Mouse): | ||
+ | pass | ||
+ | |||
+ | |||
+ | mickey = Mouse() | ||
+ | print(isinstance(mickey, | ||
+ | </ | ||
+ | |||
+ | 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) | ||
+ | </ | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | |||
+ | class LabMouse(Mouse): | ||
+ | def __str__(self): | ||
+ | return " | ||
+ | |||
+ | |||
+ | doctor_mouse = LabMouse(); | ||
+ | print(doctor_mouse) | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | Mouse.Population += 1 | ||
+ | self.name = name | ||
+ | |||
+ | def __str__(self): | ||
+ | return "Hola, mi nombre es " + self.name | ||
+ | |||
+ | class LabMouse(Mouse): | ||
+ | pass | ||
+ | |||
+ | professor_mouse = LabMouse(" | ||
+ | print(professor_mouse, | ||
+ | </ | ||
+ | |||
+ | 7. Para encontrar cualquier propiedad de objeto/ | ||
+ | |||
+ | * 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 // | ||
+ | |||
+ | 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, | ||
+ | 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(" | ||
+ | print(mus) | ||
+ | </ |