Python Glossary English

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Сообщить о неточности