__new__
ist ein Konstruktor, der eine neue Instanz dieser Klasse erstellt, und __init__
ist, wie der Name schon sagt, ein Initialisierer zum Anpassen einer neu erstellten Instanz. Dieses offizielle Python-Dokumentに説明されているとおり、__init__
は、__new__
が作成したインスタンスを、呼び出し元に返される前にself
として受け取ります。
Selbst innerhalb von "new" scheint es an diesem Punkt möglich zu sein, die Instanzmethode zu verwenden, wenn die Instanz bereits erstellt wurde.
Rufen Sie im folgenden Beispielcode unmittelbar nach dem Erstellen einer Instanz von Foo
mit object .__ new __
in Foo .__ new __
sofort die Instanzmethode Early_call
auf und setzen Sie die Instanzvariable self.arg
. Ich habe es erstellt, kann es aber ordnungsgemäß ausführen.
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.Wird ausgegeben.
Tatsächlich verwendet die Implementierung von pandas MultiIndex diese Verwendung. Ich werde.
Recommended Posts