__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