Aclaración de MRO en clases de nuevo estilo
A diferencia del antiguo -clases de estilo, las clases de nuevo estilo realizan una introspección de sus clases base para establecer un orden de resolución de método (MRO). Este orden determina la secuencia en la que se buscan los métodos cuando se llama a un método en un objeto.
Resolver conflictos de herencia con MRO
La distinción clave entre MRO en nuevos- Las clases de estilo y estilo antiguo surgen cuando la misma clase ancestral aparece varias veces en la jerarquía de herencia. Por ejemplo, considere el siguiente caso de herencia de diamantes:
class Base1(object):
def amethod(self):
print("Base1")
class Base2(Base1):
pass
class Base3(object):
def amethod(self):
print("Base3")
class Derived(Base2, Base3):
pass
MRO estilo heredado:
En las clases de estilo heredado, el orden de resolución sería D - B - A - C - A. Aquí, al invocar D .amethod(), la definición en A se encuentra primero y anula la definición en C.
Nuevo estilo MRO:
Para clases de nuevo estilo, el MRO es el siguiente:
D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>,
<class '__main__.A'>, <type 'object'>)
Observe que A aparece solo una vez en este orden, después de todas sus subclases. Esto garantiza que las anulaciones en subclases, como la anulación de un método por parte de C, tengan prioridad.
Comprender la importancia de MRO
El MRO en clases de nuevo estilo resuelve conflictos de herencia con sensatez, permitiendo que las anulaciones funcionen correctamente. También evita situaciones en las que aparecen múltiples definiciones del mismo método en el orden de resolución, lo que genera un comportamiento ambiguo. Al comprender y utilizar MRO de manera efectiva, los desarrolladores pueden diseñar jerarquías de herencia sólidas y fáciles de mantener en Python.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3