我正在尝试实施自定义find_module
和load_module
方法。
它似乎被调用,但始终调用find_module
全名和路径始终设置为None
。
我不明白为什么。
这是程序存根:
class TouchImportLoader:
def load_module(self, fullname):
return None
class TouchImportFinder:
def find_module(self, fullname, path=None):
#fullname and path seem to be None always, when printed here
return TouchImportLoader()
sys.meta_path.append(TouchImportFinder)
我用简单的脚本调用它,例如:
import time
print(time.clock())
答案 0 :(得分:1)
请阅读documentation:
至少使用要导入的模块的绝对名称调用
find_module()
方法。如果要导入的模块包含在包中,则父包的__path__
属性将作为第二个参数传入。
path
参数仅针对包传递。
在您的示例中,您应该获得TypeError
:
必须使用find_module()
实例作为第一个参数调用未绑定方法
TouchImportFinder
(获取str
实例)
...因为您要将查找程序类添加到meta_path
,而不是该类的实例:
sys.meta_path.append(TouchImportFinder)
这应该是:
sys.meta_path.append(TouchImportFinder())