Как подключиться к сигналу 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 +:

Как вы предоставляете метод обратного вызова для непрозрачного объекта со слабой семантикой? Если соединяющий объект выходит из области видимости, он должен быть удален, а обратный вызов должен действовать как запрет; Соединитель не должен содержать ссылку на соединитель.

Чтобы уточнить: я явно хочу избежать вызова метода "деструктор / финализатор"

Ответы на вопрос(3)

Ваш ответ на вопрос