weak references to bound methods

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Hallo zusammen,

an ein Objekt gebundene Methoden können aufgrund der Art und Weise, wie "bound method"-Objekte erzeugt (und eben wieder verworfen) werden, nicht ohne weiteres schwach referenziert werden.

Ich habe mich etwas in die Thematik des Methodenaufrufes eingelesen (Python surprises) und einen "Workaround" geschrieben. Bewusst habe ich die Quellen ignoriert, welche bereits eine vorgefertigte Lösung vorschlagen.

Ich wollte die Dereferenzierung der von WeakRef-Objekten nachempfinden. Vergleichsoperatoren sind hier nicht aufgeführt.

Code: Alles auswählen

class WeakMethod:
    def __init__(self, method):
        assert(type(method) == types.MethodType)
        self._object = weakref.ref(method.__self__)
        self._function = method.__func__
    
    def __call__(self):
        object_ = self._object()
        if not object_: return None
        return functools.partial(self._function, object_)
Ist die Implementierung wirklich derart einfach, oder habe ich eine "fiese Schweinerei" übersehen?

Grüße ... bwbg
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Antworten