我编写了以下小脚本来了解属性。我无法理解的一件事是,我的班级metaObject()
的{{1}}现在包含名为A
的属性。它是如何获得这些信息的?在我的类中,它仅用作设置属性的调用的目标变量的名称。怎么能实现呢?它也可以用普通的Python实现,即没有C API吗?
conf_name
答案 0 :(得分:0)
如果这不应该是您的对象类的属性,它属于该类__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)
,我可以得到这个类型的所有其他线程的列表,以及通过查询{{1 },甚至thread.all_instances
。然而,您可以处理对象删除,否则您的类的每个项目将始终存在引用,因此永远不会被垃圾回收。
另请注意,thread.all_instances[-1].all_instances
仅存在于my_locally_scoped_variable
的范围内,并且不会创建属性。