You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:39:59