Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Següent revisió | Revisió prèvia | ||
| info:cursos:netacad:python:pe2m3:herencia [05/07/2022 12:11] – creat mate | info:cursos:netacad:python:pe2m3:herencia [05/07/2022 12:29] (actual) – [El Problema del Diamante] mate | ||
|---|---|---|---|
| Línia 524: | Línia 524: | ||
| </ | </ | ||
| - | La clase //Sub// hereda todos los bienes de dos superclases //Left// y // | + | La clase //Sub// hereda todos los bienes de dos superclases //Left// y //Right// (estos nombres están destinados a ser significativos). |
| No hay duda de que la variable de clase // | No hay duda de que la variable de clase // | ||
| 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) | ||
| + | </ | ||