Dan*_*Dan 6 python destructor shutdown
有没有一种方法可以添加到我的模块中,在破坏类时会调用它?
我们有一个简单的类,它只有静态成员函数,需要在卸载模块时清理数据库连接.
希望有一个__del__方法可以用于没有实例的模块或类吗?
nos*_*klo 18
在破坏哪个班级?我虽然你说模块?
你的模块一直存在,直到翻译停止.您可以使用"atexit"模块添加当时运行的内容:
import atexit
atexit.register(myfunction)
Run Code Online (Sandbox Code Playgroud)
编辑:根据您的意见.
既然你不希望它作为析构函数,我上面的答案是正确的.只需def另一个函数(或静态方法,如果你愿意)并使用atexit注册它:
def close_database():
proceed_to_close()
import atexit
atexit.register(close_database)
Run Code Online (Sandbox Code Playgroud)
现在快速说明你的定义.
你说这堂课没有任何实例.那为什么要成为一个班级?为什么不在模块级别定义函数呢?模块是一流的对象,只缓存和导入一次......
示例,而不是定义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)
Run Code Online (Sandbox Code Playgroud)
和使用:
from database import DataBase
DataBase.execute_some_query(query)
Run Code Online (Sandbox Code Playgroud)
你可以这样做database.py:
def execute_some_query(query):
code_here()
some_code()
def close_database():
proceed_to_close()
import atexit ; atexit.register(close_database)
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
import database
database.execute_some_query(query)
Run Code Online (Sandbox Code Playgroud)
或者更好:使用sqlalchemy并避免创建自己的数据库接口的所有麻烦.
| 归档时间: |
|
| 查看次数: |
5680 次 |
| 最近记录: |