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_)
Grüße ... bwbg