Utilisation pour appeler une méthode d'une instance avant qu'elle ne soit renvoyée par __new__

__new__ est un constructeur qui crée une nouvelle instance de cette classe, et __init__ est, comme son nom l'indique, un initialiseur pour personnaliser une instance nouvellement créée. Ce document officiel Pythonに説明されているとおり、__init__は、__new__が作成したインスタンスを、呼び出し元に返される前にselfとして受け取ります。

En fait, même à l'intérieur de __new__, il semble possible d'utiliser la méthode d'instance à ce stade si l'instance a déjà été créée.

Dans l'exemple de code suivant, immédiatement après avoir créé une instance de Foo à l'aide de ʻobject .__ new__ dans Foo .__ new __, appelez immédiatement la méthode d'instance ʻearly_call et définissez la variable d'instance self.arg. Je l'ai créé, mais je suis capable de l'exécuter correctement.

python


class Foo:

    def __new__(cls, arg):
        instance = object.__new__(cls)
        instance.early_call(arg)
        return instance
                 
    def __init__(self, arg):
        print(self.arg)

    def early_call(self, arg):
        self.arg = arg

foo = Foo("I'm foo.")    # I'm foo.Est sortie.

En fait, l'implémentation de pandas MultiIndex utilise cet usage. Je vais.

Recommended Posts

Utilisation pour appeler une méthode d'une instance avant qu'elle ne soit renvoyée par __new__
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python
[Python] Qu'est-ce qu'une tranche? Une explication facile à comprendre de son utilisation avec un exemple concret
Est-il possible de se lancer dans une entreprise de pré-cotation et de faire fortune avec des stock-options?
Quelle est la méthode Newton? ?? Solution approximative de l'équation à résoudre par la méthode de Newton
Un moyen simple de mesurer la vitesse de traitement d'un disque reconnu par Linux
Ne prenez pas une instance d'une classe d'exception Python directement comme argument de la classe d'exception!
Bluemix-Script pour annuler une instance d'IaaS (anciennement SoftLayer)
Comment déployer une application Go sur une instance ECS
La méthode de copie de pandas.DataFrame est une copie profonde par défaut
python (2) nécessite self car la méthode est une méthode d'instance
J'ai fait une classe pour vérifier si c'est un constituant de TOPIX Core30, Large70, Mid400, Small
Créez un tableau à deux dimensions en ajoutant une ligne à la fin d'un tableau vide avec numpy