Сообщить об ошибке.

Функция proxy() модуля weakref в Python

Использовать прокси объект по слабой ссылке

Синтаксис:

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>