Python 3.4+weakrefпонятие
weakref.WeakMethod
слабые ссылки
Слабая ссылка на связанный метод, которая живёт, пока жив объект. Обычный weakref.ref(obj.method) умирает сразу же.
Синтаксис
r = weakref.WeakMethod(obj.method); r()
obj.method — это новый объект MethodType при каждом обращении, и на него больше никто не ссылается, поэтому weakref.ref(obj.method)() сразу даёт None. WeakMethod хранит слабые ссылки отдельно на объект и на функцию и пересобирает метод при вызове r(). Типичное применение — подписчики событий: обработчик-метод не должен удерживать объект в памяти.
Примеры
import weakref
class Button:
def click(self):
return 'clicked'
b = Button()
print(weakref.ref(b.click)()) # → None
m = weakref.WeakMethod(b.click)
print(m()()) # → clicked
del b
print(m()) # → None
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности