Почему PySide неявно создает члены объекта из членов класса для сигналов?

НаСтраница сигналов и слотов PySide в нем говорится: «Сигналы - это объекты времени выполнения, принадлежащие экземплярам, а не атрибуты класса». Очевидно, конструктор QObject просматривает атрибуты класса для сигналов и копирует их в экземпляр объекта. Это подтверждается моей тестовой программой.

из PySide импортировать QtCore

class Klass(QtCore.QObject):
    lst = []
    sig = QtCore.Signal(str)

def main():
    obj1 = Klass()
    obj2 = Klass()

    print "id: obj1.lst  = {}, obj1.sig  = {}".format(id(obj1.lst),  id(obj1.sig))
    print "id: obj2.lst  = {}, obj2.sig  = {}".format(id(obj2.lst),  id(obj2.sig))
    print "id: klass.lst = {}, klass.sig = {}".format(id(Klass.lst), id(Klass.sig))

if __name__ == '__main__':
    main()

В моем выводе вы можете видеть, что теперь есть три объекта сигнала, тогда как идентификатор lst-member одинаков как для объектов, так и для класса.

id: obj1.lst  = 4317739344, obj1.sig  = 4297560376
id: obj2.lst  = 4317739344, obj2.sig  = 4297560400
id: klass.lst = 4317739344, klass.sig = 4317851072

Неявное создание атрибутов объекта является просто запутанным и, следовательно, плохим стилем (ИМХО). Может быть, у них есть веские причины для этого, но я их не вижу. Итак, мой вопрос: почему они выбрали это решение вместо того, чтобы просто создать сигнал как обычный атрибут в конструкторе?

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

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