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

Herança múltipla do Python

Herança múltipla do Python


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 multinível e a ordem de resolução de métodos.

Herança múltipla do 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 base 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, o MultiDerivado classe é derivada de Base1 e Base2 Aulas.

O Multiderivado classe herda de ambos Base1 e Base2 Aulas.

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 visualização correspondente é dado abaixo.
class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

Aqui, o Derivado1 classe é derivada da Base classe e o Derivado2 classe é derivada de Derived1 classe.

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




Cada classe em Python é derivada do object classe. É o tipo mais básico em Python.

Então, tecnicamente, todas as outras classes, incorporadas ou definidas pelo usuário, são classes derivadas e todos os objetos são instâncias do object classe.
# 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 da esquerda para a direita, sem pesquisar a mesma classe duas vezes.

Então, no exemplo acima de MultiDerived class a ordem de pesquisa é [MultiDerived , Base1 , Base2 , object ]. Essa ordem também é chamada de linearização de MultiDerived class e o conjunto de regras usado para encontrar esse pedido é chamado de Method Resolution Order (MRO) .

O MRO deve evitar a ordenação de precedência local e também fornecer monotonicidade. Ele garante que uma classe sempre apareça antes de seus pais. No caso de vários pais, 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__
(<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>)

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

Aqui está um exemplo de herança múltipla um pouco mais complexo e sua visualização junto com o 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())

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

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

python

  1. Tipos de dados Python
  2. Operadores Python
  3. Instrução de passagem do Python
  4. Dicionário Python
  5. Exceções personalizadas do Python
  6. Programação Orientada a Objetos Python
  7. Herança Python
  8. type() e isinstance() em Python com exemplos
  9. C# - Herança
  10. Python - Orientado a Objetos