Ich versuche ein Objekt zu erstellen (nicht genau wiederherzustellen), dessen Attribute in einer Datenbank gespeichert sind. Daher möchte ich __init__
nicht aufrufen. Dieser Wunsch scheint mit in Verbindung zu stehen, die Guido für __new__
beabsichtigt . Ich verstehe nicht, warum __init__
nicht aufgerufen wird.
Nehmen Sie beispielsweise das folgende Snippet, es gibt eine Instanz der Klasse User zurück, ohne __init__
aufzurufen.
Das ist genau das Verhalten, das ich möchte. Aber meine Frage ist, dass ich nicht verstehe, warum?
Nach den Python-Dokumenten wird __init__
aufgerufen, wenn __new__
"gibt eine Instanz von cls zurück."
Warum wird __init__
nicht einmal aufgerufen, obwohl __new__
eine Klasseninstanz zurückgibt?
Der -Konstruktor ( User()
) ist dafür verantwortlich, den Zuordner ( User.__new__()
) und den Initialisierer aufzurufen ( User.__init__()
) im Gegenzug. Da der Konstruktor nie aufgerufen wird, wird der Initialisierer nie aufgerufen.
Weil Sie den üblichen Konstruktionsmechanismus umgehen, indem Sie __new__
direkt aufrufen. Die __init__
-after- __new__
-Logik ist in type.__call__
(in CPython siehe typeobject.c
, type_call
-Funktion), also nur, wenn Sie User(...)
machen würden.
Tags und Links python