Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Herencia múltiple de Python

Herencia múltiple de Python

En este tutorial, aprenderá sobre la herencia múltiple en Python y cómo usarla en su programa. También aprenderá sobre la herencia multinivel y el orden de resolución de métodos.

Herencia múltiple de Python

Una clase se puede derivar de más de una clase base en Python, similar a C++. Esto se llama herencia múltiple.

En la herencia múltiple, las características de todas las clases base se heredan en la clase derivada. La sintaxis de la herencia múltiple es similar a la herencia única.

Ejemplo

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

Aquí, el Multiderivado la clase se deriva de Base1 y Base2 clases.

El Multiderivado la clase hereda de ambos Base1 y Base2 clases.


Herencia multinivel de Python

También podemos heredar de una clase derivada. Esto se llama herencia multinivel. Puede ser de cualquier profundidad en Python.

En la herencia multinivel, las características de la clase base y la clase derivada se heredan en la nueva clase derivada.

A continuación se proporciona un ejemplo con la visualización correspondiente.

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

Aquí, el Derivado1 la clase se deriva de la Base clase, y el Derivado2 la clase se deriva de Derived1 clase.


Orden de resolución de métodos en Python

Cada clase en Python se deriva del object clase. Es el tipo más básico en Python.

Entonces, técnicamente, todas las demás clases, ya sean integradas o definidas por el usuario, son clases derivadas y todos los objetos son instancias del object clase.

# Output: True
print(issubclass(list,object))

# Output: True
print(isinstance(5.5,object))

# Output: True
print(isinstance("Hello",object))

En el escenario de herencia múltiple, cualquier atributo especificado se busca primero en la clase actual. Si no se encuentra, la búsqueda continúa en las clases principales en profundidad primero, de izquierda a derecha sin buscar la misma clase dos veces.

Entonces, en el ejemplo anterior de MultiDerived clase el orden de búsqueda es [MultiDerived , Base1 , Base2 , object ]. Este orden también se llama linealización de MultiDerived clase y el conjunto de reglas que se utilizan para encontrar este orden se llama Orden de resolución de métodos (MRO) .

MRO debe evitar el orden de precedencia local y también proporcionar monotonicidad. Asegura que una clase siempre aparezca antes que sus padres. En caso de padres múltiples, el orden es el mismo que el de las tuplas de las clases base.

El MRO de una clase se puede ver como el __mro__ atributo o el mro() método. El primero devuelve una tupla mientras que el segundo devuelve una lista.

>>> MultiDerived.__mro__
(<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>)

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>]

Aquí hay un ejemplo de herencia múltiple un poco más complejo y su visualización junto con el MRO.

# Demonstration of MRO

class X:
    pass


class Y:
    pass


class Z:
    pass


class A(X, Y):
    pass


class B(Y, Z):
    pass


class M(B, A, Z):
    pass

# Output:
# [<class '__main__.M'>, <class '__main__.B'>,
#  <class '__main__.A'>, <class '__main__.X'>,
#  <class '__main__.Y'>, <class '__main__.Z'>,
#  <class 'object'>]

print(M.mro())

Salida

[<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

Para conocer el algoritmo real sobre cómo se calcula MRO, visite Discusión sobre MRO.


python

  1. Herencia de C#
  2. Tipos de datos de Python
  3. Operadores de Python
  4. Declaración de paso de Python
  5. Diccionario de Python
  6. Excepciones personalizadas de Python
  7. Programación orientada a objetos de Python
  8. Herencia de Python
  9. type() y isinstance() en Python con ejemplos
  10. C# - Herencia
  11. Python - Orientado a Objetos