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

Python3与PyQt5类属性内存处理机制是否一致?

问题解答

1. Duodate是否复制了Tempus对象?

不是复制,是你在Duodate类内部全新实例化了一个Tempus对象。从内存地址不同就能直接确认:Controller里的varA是一次Tempus()调用生成的实例,Duodate里的day_new是另一次Tempus()调用的结果,两者是完全独立的两个对象,修改其中一个的属性自然不会影响另一个。

而你之前的原生Python代码能保持内存地址一致,是因为Transform类操作的是同一个Tempus实例,没有重新创建新对象,所以修改属性后内存地址不变,效果符合预期。

2. PyQt5组件类是否存在这种预期行为?

这和PyQt5组件类本身无关,完全是Python对象的基础特性:每次调用类的构造方法(比如Tempus())都会生成全新的对象,拥有独立的内存地址和属性空间。

PyQt5的自定义组件类(比如你写的Controller、Duodate)不会自动共享或复制对象,除非你主动传递同一个实例引用。比如可以修改Duodate的初始化逻辑,让它接收外部传入的Tempus实例,而不是自己创建新的:

class Duodate(QWidget):
    def __init__(self, tempus_instance, parent=None):
        super().__init__(parent)
        self.day_new = tempus_instance  # 使用传入的已有实例,而非新建

# 在Controller中创建Duodate时传入varA
self.duodate = Duodate(self.varA)

这样self.day_new和varA指向同一个对象,修改day_new的属性时,varA的属性也会同步更新。

内容的提问来源于stack exchange,提问作者afernandezody

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:45:37