Python-cod中的延迟导入

2024-09-30 06:25:50 发布

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

我试图理解self.module在这段代码中是如何工作的,尤其是当在初始化过程中将self.module变量设置为None之后,self.module变量会变成{},那么它如何能切换到notNone?在

class LazyImport:
    def __init__(self, module_name):
        self.module_name = module_name
        self.module = None
    def __getattr__(self, name):
        if self.module is None:
            self.module = __import__(self.module_name)
        return getattr(self.module, name)

string = LazyImport("string")
print string.lowercase

输出是'abcdefghijklmnopqrstuvwxyz'


Tags: 代码nameselfnonestringifinitis
1条回答
网友
1楼 · 发布于 2024-09-30 06:25:50

在您的例子中,string.lowercase表示string.__getattr__('lowercase'),即LazyImport中的__getattr__被调用。这个方法第一次被调用self.moduleNone,模块将被导入。第二次和每次下一次self.module都将被设置,并将进行导入。因为我们只有一个字符串名称,所以需要函数__import__来导入模块。最后,getattr(self.module, name)检索module.name,其中的名称也是一个字符串。在

因此,如果没有访问string(即LazyImport的实例)的属性,则不会发生任何模块{}的导入。在

相关问题 更多 >

    热门问题