Seite 1 von 1

weak references to bound methods

Verfasst: Mittwoch 28. September 2011, 14:31
von bwbg
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