Die documentation for Pickle speziell sagt:Warum ruft Pickle nicht __new__ an, wie die Dokumentation sagt?
Instanzen eines neuen Stils der Klasse C verwenden erstellt:
obj = C.__new__(C, *args)
Der Versuch, diesen Vorteil zu nehmen, habe ich eine Singleton erstellt mit keine Instanz-Attribute oder Methoden:
class ZeroResultSentinel(object):
instance = None
def __new__(cls, *args):
if not cls.instance:
cls.instance = super(ZeroResultSentinel, cls).__new__(cls, *args)
return cls.instance
(Diese Klasse in einer Caching-Schicht verwendet wird, ein nicht-Ergebnis Ergebnis her zu differenzieren m nichts im Cache.)
Der Singleton funktioniert hervorragend (jeder Aufruf von ZeroResultSentinel()
führt zur gleichen Instanz im Speicher und ZeroResultSentinel() == ZeroResultSentinel()
ergibt True
). Und ich kann picken und die Instanz ohne Fehler entfernen. Wenn ich es jedoch abziehe, bekomme ich eine andere Instanz. Also habe ich einen Breakpoint innerhalb __new__
platziert. Ich knalle den Haltepunkt jedes Mal, wenn ich ZeroResultSentinel()
anrufen, aber ich trete nicht auf einen Haltepunkt, wenn ich ein eingelegtes ZeroResultSentinel
abnehme. Dies steht in direktem Widerspruch zur Dokumentation. Tue ich etwas falsch oder ist die Dokumentation falsch?
Welches Beizprotokoll geben Sie an? – user2357112