Maison > développement back-end > Tutoriel Python > Quand `__init__()` ne suit-il pas `__new__()` dans l'instanciation de classe Python ?

Quand `__init__()` ne suit-il pas `__new__()` dans l'instanciation de classe Python ?

Mary-Kate Olsen
Libérer: 2024-12-14 14:35:15
original
772 Les gens l'ont consulté

When Does `__init__()` Not Follow `__new__()` in Python Class Instantiation?

Comprendre la séquence d'exécution de __new__() et __init__()

Les méthodes __new__() et __init__() de Python jouent un rôle essentiel en classe instanciation. __new__() crée une nouvelle instance d'une classe, tandis que __init__() initialise cette instance. La séquence d'exécution attendue est que __new__() soit appelée avant __init__().

Cependant, un scénario spécifique peut modifier cette séquence. Lors de l'implémentation d'une méthode __new__() personnalisée, il est possible de manipuler la création d'instance et de renvoyer une instance existante au lieu d'en créer une nouvelle. Ce comportement est utilisé pour implémenter des modèles tels que le modèle de conception flyweight.

Dans de tels cas, vous pourriez observer que __init__() est appelé après __new__() même si c'est inattendu. __init__() est toujours appelé après __new__() à moins que la __new__() personnalisée ne renvoie un objet existant.

Pour résoudre ce problème, envisagez d'implémenter la fonctionnalité souhaitée d'une manière plus conventionnelle, par exemple en utilisant une fonction d'usine. Vous pouvez également inclure le code d'initialisation dans la méthode personnalisée __new__(). Cependant, cette approche peut être considérée comme « hackée » et n'est pas recommandée comme meilleure pratique.

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