解构类也会解构其中使用的另一个类?

2024-10-03 23:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我仍然是python的初学者,目前正在使用2.7版作为我想制作的一个小模块。你知道吗

它用于创建菜单(目前非常简单)

根据Daniel和delnan的答案更新:

每个菜单都是一个对象:

class UiNavMenu(object):

    def __init__(self):
       self.title = title
       self.links = []

    def add(self, title, link, **kwargs):
        '''
        Add a link to the menu by creating a UiNavLink object.
        '''
        link = UiNavLink(title, link, kwargs)
        self.links.append(link)

    def clear(self):
        '''
        Clear all links in the menu
        '''
        self.links = []

    def __repr__(self):
        return "<UInavmenu object> Menu '%s' : %s links" % (self.title, len(self.links))

这其实很基本。你知道吗

现在链接对象:

class UiNavLink(object):

    def __init__(self, title, link, **kwargs):

        self.title = title
        self.link = link

        for key, value in kwargs.items():
            self.key = value

所以现在,我想知道的是:

首先,我知道python使用垃圾收集器,并且在进程的和处销毁一个对象。你知道吗

但是如果我使用如下菜单对象的clean()方法:菜单.清洁(),菜单将与他的所有内容一起被销毁。所以名单上(自我列表)也会被摧毁。你知道吗

但是列表中包含的links对象(UiNavLink对象)是否也会被销毁,这样我就不必处理它了? 还是要我手动处理?!你知道吗

非常感谢:)

亚恩


Tags: the对象inselfobjecttitleinitdef
1条回答
网友
1楼 · 发布于 2024-10-03 23:29:31

Python(或者更确切地说,默认的CPython实现)使用引用计数。当包含对另一个对象的引用的对象(或包含本身包含对某个对象的引用的列表)被删除或超出范围时,该对象的引用计数将减少。当对象的引用计数为0时,它将被垃圾收集。因此,如果您的列表是对这些对象的唯一引用,那么当它们的持有者是时,它们将被删除-但是如果其他变量也持有引用,它们将不会被删除。你知道吗

不过有几点。首先,你应该很少为此担心。Python内存管理是自动的,内存泄漏很难实现(尽管不是不可能)。你知道吗

其次,正如德尔南在评论中指出的,__del__绝对不是正确的方法。__del__是由Python自动调用的(虽然不能保证只调用一次,或者根本不调用),而且定义它的事实比不定义它更可能导致内存泄漏。你知道吗

相关问题 更多 >