gpt4 book ai didi

python - 在 Python 中删除模块时调用的方法

转载 作者:太空狗 更新时间:2023-10-29 22:06:10 25 4
gpt4 key购买 nike

是否有一种方法可以添加到我的模块中,在销毁类时调用该方法?

我们有一个简单的类,它只有静态成员函数,需要在卸载模块时清理数据库连接。

是否希望为没有实例的模块或类提供 __del__ 方法?

最佳答案

什么时候销毁哪个类?我以为你说的是​​模块?

您的模块会一直存在,直到解释器停止。你可以使用“atexit”模块添加一些东西在那个时候运行:

import atexit
atexit.register(myfunction)

编辑:根据您的评论。

因为你不希望它作为析构函数,所以我上面的回答是正确的。只需定义另一个函数(如果你愿意,也可以是静态方法)并用 atexit 注册它:

def close_database():
proceed_to_close()

import atexit
atexit.register(close_database)

现在快速记下您的定义。

你说这个类没有任何实例。那么为什么要把它变成一个类呢?为什么不在模块级别定义函数呢?模块是一流的对象,仅缓存和导入一次...

示例,而不是定义 database.py:

class DataBase(object):
@staticmethod
def execute_some_query(query):
code_here()
some_code()
@staticmethod
def close_database():
proceed_to_close()
import atexit ; atexit.register(DataBase.close_database)

并使用:

from database import DataBase
DataBase.execute_some_query(query)

您可以在 database.py 上执行此操作:

def execute_some_query(query):
code_here()
some_code()

def close_database():
proceed_to_close()
import atexit ; atexit.register(close_database)

然后像这样使用它:

import database
database.execute_some_query(query)

或者更好:使用 sqlalchemy并避免所有这些创建您自己的数据库接口(interface)的麻烦。

关于python - 在 Python 中删除模块时调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944336/

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