gpt4 book ai didi

python嵌套函数内存泄漏?

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:24 31 4
gpt4 key购买 nike

根据以前的 java 经验,我知道如果两个 GUI 类对象包含彼此的成员变量引用,则在两个对象都被销毁之前可能会发生内存泄漏。

那种情况调试起来非常困惑,所以我想在 python 中使用严格的指导方针来避免内存泄漏。

我目前有一个 GUI 系统,其中有一个主窗口 (parent_window) 和许多子窗口(子窗口),这些子窗口会为用户弹出辅助选项等。

我认为防止内存泄漏的一个简单方法是不要在所有子窗口中保留父窗口的类成员变量。

class child_window(object):
def make_child_window(self, parent_window):
def on_ok(): parent_window.show()
QtCore.QObject.connect(self.okbutton, QtCore.SIGNAL("clicked()"), on_ok)

如您所见,我有一个调用 parent_window 的嵌套函数,它仅包含在类方法(“make_child_window”)的局部范围内。这是作弊吗?在较低级别上,python 是否实质上将我的“parent_window”存储为类变量?对于将 child_window 与内存中的 parent_window 隔离开来,您还有哪些其他建议?

最佳答案

你可以调用父类,因为它是自己的/派生的方法

class child_window(object):
def make_child_window(self): # no need for parent
def on_ok(): self.show() #no need for parent
QtCore.QObject.connect(self.okbutton, QtCore.SIGNAL("clicked()"), on_ok)

这是可行的,因为 self 实例是方法字典,包含所有派生类的所有方法,因此您可以从任何范围访问它们。

这也回答了您关于 GC 的第一个问题,即只有一个引用,子类的 self 也是父类的 self,对于派生类也是如此。

更进一步。从 child 你可以调用 parent_object.show(self) 因为 show(self) 将是具有参数 self 的静态方法来明确地告诉来自哪个类在实例 self 上使用方法。

self 只是实例

关于python嵌套函数内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11852844/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com