Python 模块导入时自动(反)初始化

Python 模块导入时自动(反)初始化,python,module,import,initialization,Python,Module,Import,Initialization,在Python中,当模块需要某种初始化时,为了使其自动完成,您只需将代码以零缩进的方式放置在模块中,以便在第一次导入时执行?。当应用程序关闭并且模块被收集时,有没有办法进行自动反初始化?听起来您特别想编写module.init方法和module.stop方法 我个人讨厌在导入模块时在模块中执行某些操作,至少在我想执行时给我一个选择。我找到了一种方法,可以这样做: class __ModuleInitializer: def __init__(self): print('M

在Python中,当模块需要某种初始化时,为了使其自动完成,您只需将代码以零缩进的方式放置在模块中,以便在第一次导入时执行?。当应用程序关闭并且模块被收集时,有没有办法进行自动反初始化?

听起来您特别想编写module.init方法和module.stop方法


我个人讨厌在导入模块时在模块中执行某些操作,至少在我想执行时给我一个选择。

我找到了一种方法,可以这样做:

class __ModuleInitializer:
    def __init__(self):
        print('Module was initialized')

    def __del__(self):
        print('Module was deinitialized')

__module_init = __ModuleInitializer()

即使我不经常使用这个,它也会是有用的知识。例如,PyMunk在导入模块时自动初始化库。在我看来,这是一件好事,我一直认为init和quit函数违背了RAII这样的原则。我现在并不是专门谈论Python。@Paul:但RAII在使用GC的语言中没有什么意义,因为您几乎无法控制事情何时最终确定。模块也是作用域,它们从不离开作用域——从某种意义上说,它们的资源就是作用域——所以对它们来说谈论作用域范围内的资源管理毫无意义。@Joe我想我用词不当。我的意思是,模块可以作为一种机制来自动地对库进行数据剥离吗?也就是说,它不是调用init,而是在第一次导入时自动初始化;这将在程序退出时自动发生,而不是调用deinit。当程序结束时,它们将被关闭,但如果您如此担心,请在atexit事件中进行清理。