首页 > 解决方案 > 为什么使用 importlib.util 会破坏类型比较?

问题描述

我有一个some_module带有文件 ( ) 的模块 ( somefile),其中包含我要实例化的对象 ( foo)。

from collections import namedtuple

foo = namedtuple('Foo', ['a', 'b'])

在某些情况下,我只知道这个文件的路径,所以一直在导入:

import importlib.util as iu

spec = iu.spec_from_file_location("some_module.somefile", 'path/to/some_module/somefile.py')
mod = iu.module_from_spec(spec)
spec.loader.exec_module(mod)

var1 = mod.foo(1 ,2)

起初这很好用,但在我的单元测试中我发现它type(var)不等于原始类型,即:

from some_module.somefile import foo

var2 = foo(1, 2)

print(type(var1) is type(var2))
print(isinstance(var1, var2.__class__)

只打印False's,尽管看起来var1&var2在功能上是等效的。

编辑:我正在使用 python 3.9.5 并且在我的测试代码中,var1&的构造函数var2位于单独的 .py 文件中,它们被导入到单元测试中,该单元测试试图检查两个对象是否相同。

标签: python

解决方案


推荐阅读