Как подключиться к сигналу GObject в python, не сохраняя ссылку на соединитель?
Проблема, в основном, заключается в следующем: в привязках Python к объектам gobject и gtk. Предположим, у нас есть класс, который связывается с сигналом при его создании:
class ClipboardMonitor (object):
def __init__(self):
clip = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
clip.connect("owner-change", self._clipboard_changed)
Проблема в том, чтони один экземпляр ClipboardMonitor никогда не умрет, Буфер обмена gtk - это объект всего приложения, и при подключении к нему сохраняется ссылка на объект, так как мы используем обратный вызовself._clipboard_changed
.
Я обсуждаю, как обойти это, используя слабые ссылки (модуль слабой ссылки), но у меня еще нет плана. У любого есть идея, как передать обратный вызов в регистрацию сигнала и заставить его вести себя как слабая ссылка (если обратный вызов сигнала вызывается, когда экземпляр ClipboardMonitor выходит за пределы области видимости, он должен быть недоступен).
Дополнение:Выражено независимо от GObject или GTK +:
Как вы предоставляете метод обратного вызова для непрозрачного объекта со слабой семантикой? Если соединяющий объект выходит из области видимости, он должен быть удален, а обратный вызов должен действовать как запрет; Соединитель не должен содержать ссылку на соединитель.
Чтобы уточнить: я явно хочу избежать вызова метода "деструктор / финализатор"