import weakref weakref.proxy(object[, callback])
object
- исходный объект,callback
- функция обратного вызова.Функция proxy()
модуля weakref
возвращает прокси объект, который использует слабую ссылку. Функция weakref.proxy()
поддерживает использование прокси в большинстве контекстов вместо явного разыменования, используемого со слабыми ссылочными объектами.
Возвращаемый объект будет иметь тип ProxyType
или CallableProxyType
, в зависимости от того, может ли объект вызываться. Прокси-объекты не являются хэшируемыми независимо от исходного объекта. Это позволяет избежать ряда проблем, связанных с их принципиально изменчивой природой и предотвращает их использование в качестве ключей словаря.
Обратный вызов callback
аналогичен параметру с таким же именем класса weakref.ref()
.
Прокси можно использовать так, как если бы они были исходным объектом, и их не нужно вызывать до того, как объект станет доступен. Как следствие, они могут быть переданы в библиотеку, которая не знает, что она получает ссылку вместо реального объекта.
>>> import weakref >>> class my_list(list): pass ... pass ... >>> new_list = my_list('String') >>> new_list # ['S', 't', 'r', 'i', 'n', 'g'] >>> new_proxy = weakref.proxy(new_list) >>> new_proxy # <weakproxy at 0x7f4160feeb88 to my_list at 0x7f4162d42f98> >>> str(new_proxy) # "['S', 't', 'r', 'i', 'n', 'g']" >>> weakref.getweakrefcount(new_list) # 1 >>> weakref.getweakrefs(new_list) # [<weakproxy at 0x7f4160feeb88 to my_list at 0x7f4162d42f98>] >>> del new_list >>> new_proxy <weakproxy at 0x7fb582569c28 to NoneType at 0x9d4380>