Я устал писать один и тот же код для объявления 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
. Есть ли способ избежать дублирования кода?