尽管看似独立,但对象依赖性仍然存在

Object dependency remains although seemingly independent

假设我有:

让我们调用 BaseObjects 中定义的 class 之一:Point。另一个 class 称为 Line,它将 2 Point 个实例 p1p2.

作为属性

包 B 实现了 class PointB(Point)。因此,对象 PointB 也是 BaseObjects.Point.

的实例

在与项目 B 相关的环境中,我创建了一个使用 2 个 PointB 对象的对象 Line。我使用 PointB 实现的特殊方法进行各种操作。

我现在想 pickle 这个 Line 对象,以便它可以加载到项目 C 中。为此,我不能保留 PointB 个实例。因此,我需要将它们“重新class”为仅 su​​perclass 的类型。我做 p1.__class__ = Pointp2.__class__ = Point。我检查:isinstance(p1, PointB) 计算结果为 False,与 p2 相同。

因此,我认为以这种方式腌制的对象可以从项目 C 中读取,因为它依赖于 BaseObjects,它定义了 class Point.

事实并非如此。当我在项目 C 中加载 pickle 文件时,它会查找我在项目 B 中定义子 classes 的文件夹。但是,当我深入研究对象时,我没有找到任何 link .据说所有对象都是 BaseObjects.<class_name>

类型

我在摆脱此对象对项目 B 的依赖性的过程中出了什么问题?有没有办法查看一个对象的所有依赖关系?

经过几个小时的额外挖掘来解决这个问题,我在问题中描述的内容完美无缺。我的问题出现在一个复杂得多的对象中,该对象具有许多引用许多其他 类 的属性。其中一个属性保持了依赖性。这是一个 non-problem,但在途中学到了很多东西!

确定问题是否来自剩余依赖项的一个好方法是实施问题中描述的内容。一些极其简单的对象,它们以最简单的方式相互关联。如果那个简单的例子不起作用,问题就出在别处。如果有效,则表示您要加载的对象中存在依赖项。