"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como a Ordem de Resolução de Método (MRO) em Classes de Novo Estilo difere das Classes de Estilo Legado e resolve conflitos de herança?

Como a Ordem de Resolução de Método (MRO) em Classes de Novo Estilo difere das Classes de Estilo Legado e resolve conflitos de herança?

Publicado em 15/11/2024
Navegar:941

How does Method Resolution Order (MRO) in New-Style Classes differ from Legacy-Style Classes and resolve inheritance conflicts?

Ordem de resolução de método (MRO) em classes de novo estilo

Esclarecendo MRO em classes de novo estilo

Ao contrário do antigo classes de estilo novo, as classes de novo estilo examinam suas classes base para estabelecer uma Ordem de Resolução de Método (MRO). Esta ordem determina a sequência na qual os métodos são pesquisados ​​quando um método é chamado em um objeto.

Resolvendo conflitos de herança com MRO

A principal distinção entre MRO em novos classes de estilo e estilo antigo surgem quando a mesma classe ancestral aparece várias vezes na hierarquia de herança. Por exemplo, considere o seguinte caso de herança de diamante:

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

Legacy-Style MRO:

Em classes de estilo legado, a ordem de resolução seria D - B - A - C - A. Aqui, ao invocar D .amethod(), a definição em A é encontrada primeiro e substitui a definição em C.

New-Style MRO:

Para classes de novo estilo, o MRO é o seguinte:

D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>,
<class '__main__.A'>, <type 'object'>)

Observe que A aparece apenas uma vez nesta ordem, depois de todas as suas subclasses. Isso garante que as substituições em subclasses, como a substituição de um método em C, tenham precedência.

Compreendendo a importância do MRO

O MRO nas classes de novo estilo resolve conflitos de herança sensatamente, permitindo que as substituições funcionem corretamente. Também evita situações em que múltiplas definições do mesmo método aparecem na ordem de resolução, levando a um comportamento ambíguo. Ao compreender e utilizar o MRO de forma eficaz, os desenvolvedores podem projetar hierarquias de herança robustas e sustentáveis ​​em Python.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3