Herança múltipla em Python: o que é e como usá-la?

Neste tutorial, você aprenderá sobre herança múltipla em Python e como usá-la em seu programa. Você também aprenderá sobre herança de vários níveis e a ordem de resolução do método.

Herança múltipla Python

Uma classe pode ser derivada de mais de uma classe base em Python, semelhante a C ++. Isso é chamado de herança múltipla.

Na herança múltipla, os recursos de todas as classes básicas são herdados na classe derivada. A sintaxe para herança múltipla é semelhante à herança única.

Exemplo

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

Aqui, a classe MultiDerived é derivada das classes Base1 e Base2.

Herança múltipla em Python

A classe MultiDerived herda das classes Base1 e Base2.

Herança multinível do Python

Também podemos herdar de uma classe derivada. Isso é chamado de herança multinível. Pode ser de qualquer profundidade em Python.

Na herança multinível, os recursos da classe base e da classe derivada são herdados na nova classe derivada.

Um exemplo com a visualização correspondente é fornecido abaixo.

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

Aqui, a classe Derived1 é derivada da classe Base e a classe Derived2 é derivada da classe Derived1.

Herança multinível em Python

Ordem de resolução de método em Python

Cada classe em Python é derivada da objectclasse. É o tipo mais básico em Python.

Portanto, tecnicamente, todas as outras classes, tanto internas quanto definidas pelo usuário, são classes derivadas e todos os objetos são instâncias da objectclasse.

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

No cenário de herança múltipla, qualquer atributo especificado é pesquisado primeiro na classe atual. Se não for encontrado, a pesquisa continua nas classes pai em profundidade, primeiro à direita, sem pesquisar a mesma classe duas vezes.

Assim, no exemplo acima de MultiDerivedclasse a ordem de pesquisa é ( MultiDerived, Base1, Base2, object). Essa ordem também é chamada de linearização de MultiDerivedclasse e o conjunto de regras usadas para encontrar essa ordem é chamado de Ordem de Resolução de Método (MRO) .

O MRO deve evitar a ordem de precedência local e também fornecer monotonicidade. Isso garante que uma classe sempre apareça antes de seus pais. No caso de pais múltiplos, a ordem é a mesma das tuplas das classes base.

O MRO de uma classe pode ser visto como o __mro__atributo ou o mro()método. O primeiro retorna uma tupla, enquanto o último retorna uma lista.

 >>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )

Aqui está um exemplo de herança múltipla um pouco mais complexo e sua visualização junto com o MRO.

Visualizando herança múltipla em Python
 # 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: # (, , # , , # , , # ) print(M.mro())

Resultado

 (,,,,,,)

Para saber o algoritmo real sobre como o MRO é calculado, visite Discussão sobre MRO.

Artigos interessantes...