Maison > développement back-end > Tutoriel Python > Comment appeler correctement les méthodes `__init__` de la classe parent dans un héritage multiple ?

Comment appeler correctement les méthodes `__init__` de la classe parent dans un héritage multiple ?

Mary-Kate Olsen
Libérer: 2024-12-01 05:36:10
original
449 Les gens l'ont consulté

How Do I Properly Call Parent Class `__init__` Methods in Multiple Inheritance?

Classe parent appelante init avec héritage multiple

Dans les scénarios où l'héritage multiple est utilisé, il est crucial de s'assurer que tous les constructeurs de classes parents sont appelés. Deux approches courantes sont :

  • ParentClass.__init__(self) (à l'ancienne)
  • super(DerivedClass, self).__init__() (style plus récent)

Cependant, si les classes parentales ne suivent pas un modèle cohérent convention, ces approches peuvent échouer.

Détermination de l'approche correcte

L'approche appropriée dépend si les classes de base sont conçues pour l'héritage multiple :

1. Classes de base autonomes

  • Non conçues pour l'héritage multiple.
  • Appelez manuellement chaque constructeur parent en utilisant soit :

    • Sans super : Foo.__init__(self), Bar.__init__(self)
    • Avec super: super().__init__() (pour tous les constructeurs jusqu'à Foo), super(Foo, self).__init__(bar) (pour tous les constructeurs après Foo)

2. Mixins

  • Conçu pour l'héritage multiple.
  • Utilisez super().__init__() dans la classe mixin, qui appelle automatiquement le constructeur suivant.
  • Héritez d'abord du mixin, par exemple, la classe FooBar(FooMixin, Bar).

3. Classes conçues pour l'héritage coopératif

  • Similaires aux mixins, mais tous les arguments sont transmis sous forme d'arguments de mot-clé.
  • Appelez super().__init__() dans toutes les classes.
  • L'ordre des classes de base n'a pas d'importance.

Supplémentaire Considérations

  • Pour les sous-classes d'objets, évitez d'appeler super().__init__().
  • Pour les classes autonomes, fournissez toujours un constructeur vide si vous héritez directement d'un objet (par exemple, class Base(object): def __init__(self): pass).

En fin de compte, la mise en œuvre correcte dépend de les classes concernées. Si une classe est conçue pour l’héritage multiple, elle doit être documentée en conséquence. Sinon, supposez qu'il n'est pas conçu pour de tels scénarios.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal