我在python软件项目中有一个相当复杂的导入设置,在这里我无法避免使用importlib动态导入某些模块。
因此,我遇到了两个对象属于同一类的情况,但是由于它们是独立加载的,因此它们之间的相等性检查使我False
。
每个对象的obj.__class__
的字符串表示形式都相同:
<class 'drivers.MongoDriver'>
与<class 'drivers.MongoDriver'>
。
但是,在两个类上分别使用__eq__
,issubclass
和__eq__
上的type()
,isinstance
进行相等性检查。
我可以想到一种通过比较repr(obj.__class__)
来进行相等性检查的骇人方法,但这似乎并不那么好。
另一种解决方案是“隐藏”指定一些唯一类ID的属性。
是否存在另一种(更好的)方式来在两个基本相同但由importlib
独立加载的类之间进行相等性检查?
编辑: 重要提示:我不是在寻找避免两次导入该类的方法。 动态地重新导入项目的某些模块,以解决运行时这些模块中的代码更改。 然后,这些模块再次导入其他模块,例如我要进行相等性检查的驱动程序。即使不必重新导入更改模块使用的那些未更改模块会很好,但我知道,每当我动态导入一个模块时,所有依赖项也会重新导入。 (如果您有关于如何重新导入本身具有(静态)导入B的模块A的解决方案,但不必与A一起重新导入B,我会很高兴的。但这不是我要问的/查找的直接内容。