我试图理解self.module
在这段代码中是如何工作的,尤其是当在初始化过程中将self.module
变量设置为None
之后,self.module
变量会变成{None
?在
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'
在您的例子中,
string.lowercase
表示string.__getattr__('lowercase')
,即LazyImport
中的__getattr__
被调用。这个方法第一次被调用self.module
是None
,模块将被导入。第二次和每次下一次self.module
都将被设置,并将进行导入。因为我们只有一个字符串名称,所以需要函数__import__
来导入模块。最后,getattr(self.module, name)
检索module.name
,其中的名称也是一个字符串。在因此,如果没有访问}的导入。在
string
(即LazyImport
的实例)的属性,则不会发生任何模块{相关问题 更多 >
编程相关推荐