Maison >développement back-end >Tutoriel Python >Pourquoi la méthode `__init__()` de Python est-elle toujours appelée après `__new__()` ?

Pourquoi la méthode `__init__()` de Python est-elle toujours appelée après `__new__()` ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 03:16:11198parcourir

Why is Python's `__init__()` method always called after `__new__()`?

Comprendre la séquence des méthodes __new__() et __init__()

En Python, lors de la création d'un objet, deux méthodes essentielles entrent en jeu : __new__() et __init__(). Alors que __init__() est généralement associé à l'initialisation d'un objet, __new__() joue un rôle fondamental dans la création d'une nouvelle instance de la classe.

Pourquoi __init__() est-il toujours appelé après __new__() ?

La raison pour laquelle __init__() est toujours invoquée après __new__() provient du processus d'instanciation de l'objet de classe. Lors de la création d'un nouvel objet d'une classe, Python exécute d'abord la méthode __new__(). Cette méthode est responsable de l'allocation de mémoire, de la création de la nouvelle instance et de son renvoi.

Une fois que la méthode __new__() a créé avec succès la nouvelle instance, Python procède à l'appel de la méthode __init__(). La méthode __init__(), comme son nom l'indique, est utilisée pour initialiser la nouvelle instance en définissant ses attributs et en exécutant tout code de configuration nécessaire.

Un exemple d'interactions __new__() et __init__()

Considérons le code Python suivant :

class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

    def __init__(self):
        # Instance-specific initialization code

Dans cet exemple, la classe Singleton implémente un modèle de conception singleton en utilisant __new__(). La méthode __new__() vérifie si une instance existe déjà et la renvoie si c'est le cas. Sinon, il crée une nouvelle instance à l'aide de la méthode super() et l'attribue à l'attribut _instance.

La méthode __init__() est ensuite appelée pour initialiser l'instance nouvellement créée. Dans ce cas, il peut être utilisé pour définir des attributs supplémentaires ou effectuer toute autre configuration nécessaire.

Alternatives à l'utilisation de __new__()

Alors que __new__() offre une flexibilité dans contrôlant la création d'instances, cela n'est généralement pas recommandé pour le code à usage général. Une alternative est le modèle Factory, qui vous permet de créer des objets sans exposer la logique de création sous-jacente.

Conclusion

En résumé, __new__() et __init__() jouent rôles distincts dans le processus d’instanciation d’objet en Python. __new__() gère la création de la nouvelle instance, tandis que __init__() l'initialise. Comprendre l'interaction entre ces méthodes est essentiel pour concevoir et mettre en œuvre un code orienté objet robuste.

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!

Déclaration:
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