weak references to bound methods
Verfasst: Mittwoch 28. September 2011, 14:31
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.
Ist die Implementierung wirklich derart einfach, oder habe ich eine "fiese Schweinerei" übersehen?
Grüße ... bwbg
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