Есть ли способ получить исходный объект из слабого прокси, указывающего на него? например, есть ли обратная сторона weakref.proxy()
?
import weakref
class C(object):
def __init__(self, other):
self.other = weakref.proxy(other)
class Other(object):
pass
others = [Other() for i in xrange(3)]
my_list = [C(others[i % len(others)]) for i in xrange(10)]
Мне нужно получить список уникальных других
членов из my_list
. Способ, который я предпочитаю для таких задач
использовать set
:
unique_others = {x.other for x in my_list}
К сожалению, это выдает TypeError: unhashable type: 'weakproxy'
unique_others = []
for x in my_list:
if x.other in unique_others:
continue
unique_others.append(x.other)
, но общая проблема, отмеченная в заголовке, все еще активна.
Что делать, если у меня под контролем только my_list
, а другие
зарыты в какую-то либу и кто-то может удалить их в любой момент, а я хочу предотвратить удаление, собрав nonweakссылок в списке?
repr()
самого объекта, а не <weakproxy at xx to Other at xx>
Думаю, должно быть что-то вроде weakref.unproxy
, о котором я не знаю.