избежание дублирования кода для свойств в PySide2

Я устал писать один и тот же код для объявления Properties для PySide2:

class BackEnd(QObject):

    my_prop_updated = Signal()

    @Property(bool)
    def my_prop(self):
        print('getter invoked'))
        return self._my_prop

    @my_prop.setter
    def set_my_prop(self, value):
        print('setter invoked')
        self._my_prop = value
        self.my_prop_updated.emit()

    def __init__(self):
        super().__init__()
        self._my_prop = None

Есть ли способ использовать дескрипторы Python с Properties? Что-то вроде этого:

class QTPropBool(Property):
    my_prop_updated = Signal()

    def my_getter(self, obj):
        print('getter invoked')
        return self._my_prop

    def my_setter(self, obj, value):
        print('setter invoked')
        self._my_prop = value
        self.my_prop_updated.emit()

    def __init__(self):
        super().__init__(bool, self.my_getter, self.my_setter, notify=self.my_prop_updated)


class BackEnd(QObject):
    my_prop = QTPropBool()

Это дает мне ошибку:

AttributeError: 'PySide2.QtCore.Signal' object has no attribute 'emit'

Вероятно, потому что это класс Property, а не QObject, и я не вызываю конструктор QObject. Есть ли способ избежать дублирования кода?


person Artem    schedule 25.07.2018    source источник
comment
Почему вы пишете так много свойств? Каков контекст?   -  person ekhumoro    schedule 25.07.2018
comment
У меня есть много текстовых полей в моем QML, и они устанавливаются/обновляются через бэкэнд Python, который взаимодействует с оборудованием.   -  person Artem    schedule 25.07.2018
comment
@Artem пометьте как дубликат вашего вопроса, потому что код аналогичен, за исключением преобразования PyQt5 в PySide, если вы не можете это сделать, перевод находится по следующей ссылке: gist.github.com/eyllanesc/21e1739e25daffb98e4a7d1fad826096   -  person eyllanesc    schedule 25.07.2018