Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Dominando Herança Múltipla, Herança Multinível e Method Resolution Order (MRO) em Python

Herança Múltipla em Python

Explore como Python suporta herança múltipla, nuances da herança multinível e como a ordem de resolução de métodos (MRO) governa lookup de atributos.

Herança Múltipla em Python

Python permite classe herdar de mais de uma classe base, assim como C++. Esse recurso é conhecido como herança múltipla e permite classe derivada combinar comportamento de várias classes pai.

A sintaxe espelha herança simples: liste todas classes pai entre parênteses, separadas por vírgula.

Exemplo

class Base1:
    pass
class Base2:
    pass
class MultiDerived(Base1, Base2):
    pass

Neste exemplo, MultiDerived herda atributos e métodos de ambos Base1 e Base2.

Dominando Herança Múltipla, Herança Multinível e Method Resolution Order (MRO) em Python

Diagrama: MultiDerived recebe features de Base1 e Base2.


Herança Multinível em Python

Além de dois níveis, você pode encadear herança: classe herda de classe derivada, criando hierarquia de herança multinível. Python suporta qualquer profundidade.

Cada nova classe derivada herda de seu pai imediato, enquanto também carrega atributos dos ancestrais.

Exemplo:

class Base:
    pass
class Derived1(Base):
    pass
class Derived2(Derived1):
    pass

Aqui, Derived1 estende Base, e Derived2 estende Derived1, formando cadeia de três níveis.

Dominando Herança Múltipla, Herança Multinível e Method Resolution Order (MRO) em Python

Method Resolution Order (MRO) em Python

Toda classe Python herda ultimamente de object, tipo base universal. Consequentemente, todos objetos são instâncias de object, sejam built-in ou user-defined:

# Saída: True
print(issubclass(list,object))
# Saída: True
print(isinstance(5.5,object))
# Saída: True
print(isinstance("Hello",object))

Quando herança múltipla envolvida, Python resolve atributos usando travessia depth-first, left-to-right, sem revisitar classe duas vezes. Essa ordem de travessia é chamada Method Resolution Order (MRO) e garante que classe apareça antes de seus pais.

O MRO para MultiDerived é: [MultiDerived, Base1, Base2, object]. Você pode visualizá-lo via atributo __mro__ ou método mro():

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'>]

Grafos de herança complexos seguem mesmo princípio. Considere este exemplo:

Dominando Herança Múltipla, Herança Multinível e Method Resolution Order (MRO) em Python
# Demonstração de 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
print(M.mro())
# Saída:
# [<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

Para aprofundar no algoritmo que calcula MRO, consulte documentação oficial Python sobre herança de classes e discussão sobre MRO.

python

  1. Dominando Tipos de Dados em Python: Guia Prático
  2. Dominando Operadores em Python: Guia Completo
  3. Dominando a Declaração Pass em Python: Guia Prático
  4. Dominando Dicionários em Python: Criação, Manipulação e Técnicas Avançadas
  5. Dominando Exceções Customizadas em Python: Guia Prático
  6. Dominando Programação Orientada a Objetos em Python: Classes, Herança, Encapsulamento e Polimorfismo
  7. Dominando Herança em Python: Conceitos, Sintaxe e Exemplos Práticos
  8. Entendendo type() e isinstance() em Python: Exemplos Práticos
  9. Dominando Herança em C#: Construa Código Reutilizável e Manutenível
  10. Programação Orientada a Objetos em Python: Guia Completo