对象不会被删除

Posted

技术标签:

【中文标题】对象不会被删除【英文标题】:The object won't be deleted 【发布时间】:2022-01-23 11:35:12 【问题描述】:
from selenium import webdriver
    
class Manager:
    def __init__(self):
        option = webdriver.ChromeOptions()
        option.add_argument('headless')
        
        self.driver = webdriver.Chrome(options=option)
        self.driver.set_window_size(1700,1000)

    def __del__(self):
        print("delete object")
        self.driver.quit()
    

if __name__ == '__main__':
    import chromedriver_autoinstaller
    chromedriver_autoinstaller.install(True)
    a = Manager()
    print('a')
    del a
    input()

没有调用析构函数 有人知道这个问题吗?? 我想删除对象

【问题讨论】:

表示同一个对象还有另一个引用。 【参考方案1】:

del 不会破坏任何对象,它只是取消链接引用。如果对 Manager 对象的其他活动引用仍然存在,或者如果垃圾收集器尚未运行以清除任何循环引用,则不会调用 __del__

如果您想保证某种清理操作,最好的办法是使用上下文管理器:

class Manager:
    def __init__(self):
        option = webdriver.ChromeOptions()
        option.add_argument('headless')
        
        self.driver = webdriver.Chrome(options=option)
        self.driver.set_window_size(1700,1000)

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        print("exit context manager")
        self.driver.quit()

然后你可以像这样使用它:

with Manager() as a:
    print('a')
input()

【讨论】:

以上是关于对象不会被删除的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 行被删除后不会被删除

SQLALCHEMY 删除关联对象不会从父子节点中删除

从画布中删除最后绘制的对象

JavaScript delete关键字

CoreData 中的删除不会删除;重新启动后出现已删除的对象

delete引用会怎么样