PySide6中不同类实例的QtCore.Signal为何内存地址不同?
PySide6中不同QObject实例的信号内存地址不同的原因
测试代码
from PySide6 import QtCore class MyClass(QtCore.QObject): my_signal = QtCore.Signal(int) def __init__(self): super().__init__() class Myclass2(): def __init__(self): self.c1 = MyClass() print(2, id(self.c1.my_signal)) class Myclass3(): def __init__(self): self.c1 = MyClass() print(3, id(self.c1.my_signal)) c1 = MyClass() print(1, id(c1.my_signal)) c2 = Myclass2() c3 = Myclass3()
原因说明
- 虽然
my_signal是定义在MyClass类级别的属性,但通过实例访问该属性时,PySide6不会直接返回类本身的信号对象,而是为每个实例动态创建一个绑定到当前实例的信号代理对象。 - 每个实例对应的信号代理都是独立的新对象,因此它们的内存地址(通过
id()获取)必然不同。 - 这种设计是为了让信号与所属实例强绑定:当信号发射时,能明确识别触发信号的实例,确保槽函数能正确处理对应实例的上下文,避免不同实例的信号逻辑混淆。
内容的提问来源于stack exchange,提问作者SLF
相关产品推荐
相关产品推荐

