了解PyQt4中的pyqtProperty
我写了下面的小脚本来理解属性。 我无法理解的一件事是,我的类A
的metaObject()
现在包含名称为conf_name
的属性。 它是如何得到这些信息的? 在我的课程中,它只被用作调用目标变量的名称来设置属性。 这怎么能被实现? 它是否也可以用普通的Python实现,即没有C API?
#!/usr/bin/python from PyQt4.QtCore import QObject, pyqtProperty from PyQt4.QtGui import QApplication class A( QObject ): def __init__( self, parent = None ): QObject.__init__( self ) self._name = "" def getName( self ): return self._name def setName( self, value ): self._name = value conf_name = pyqtProperty( "QString", getName, setName ) a = QApplication([]) ai = A() for i in range( ai.metaObject().propertyCount() ): print ai.metaObject().property( i ).name()
如果这不是你的对象类的属性,它就属于那个类__init__
函数。 你在那里有一个类属性,它将被该子类对象类型的所有对象继承。
这实际上可能非常有用。 例如:
for PyQt4.QtCore import QThread
class My_Thread(QThread):
all_instances = []
def __del__(self, *args, **kwargs):
all_instances.remove(self)
QThread.__del__(self, *args, **kwargs)
def __init__(self, *args, **kwargs):
QThread.__init__(self, *args, **kwargs)
my_locally_scoped_variable = None
self.all_instances.append(self)
这个类创建了一个QThread的子类,它匹配它的确切接口,除非我创建了thread = My_Thread(blahblahblah)
,我可以获得这个类型的所有其他线程的列表,以及通过查询thread.all_instances
任何子类,或者甚至thread.all_instances[-1].all_instances
。 不管怎样处理对象删除,否则引用将永远存在于你的类的每个项目,因此永远不会被垃圾收集。
另请注意, my_locally_scoped_variable
只存在于__init__
范围内,并且不会创建属性。