我厌倦了编写相同的代码来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
的构造函数。有没有办法避免代码重复?