尽管看似独立,但对象依赖性仍然存在
Object dependency remains although seemingly independent
假设我有:
- 我们将在下文中称为
BaseObjects
的包 A
- 项目 B 将
BaseObjects
安装为依赖项并为 BaseOjects
中定义的某些 class 定义子 class
- 项目 C 将
BaseObjects
作为依赖项安装,但无法以任何方式访问项目 B
让我们调用 BaseObjects
中定义的 class 之一:Point
。另一个 class 称为 Line
,它将 2 Point
个实例 p1
和 p2
.
作为属性
包 B 实现了 class PointB(Point)
。因此,对象 PointB
也是 BaseObjects.Point
.
的实例
在与项目 B 相关的环境中,我创建了一个使用 2 个 PointB
对象的对象 Line
。我使用 PointB
实现的特殊方法进行各种操作。
我现在想 pickle 这个 Line
对象,以便它可以加载到项目 C 中。为此,我不能保留 PointB
个实例。因此,我需要将它们“重新class”为仅 superclass 的类型。我做 p1.__class__ = Point
和 p2.__class__ = Point
。我检查:isinstance(p1, PointB)
计算结果为 False
,与 p2
相同。
因此,我认为以这种方式腌制的对象可以从项目 C 中读取,因为它依赖于 BaseObjects
,它定义了 class Point
.
事实并非如此。当我在项目 C 中加载 pickle 文件时,它会查找我在项目 B 中定义子 classes 的文件夹。但是,当我深入研究对象时,我没有找到任何 link .据说所有对象都是 BaseObjects.<class_name>
类型
我在摆脱此对象对项目 B 的依赖性的过程中出了什么问题?有没有办法查看一个对象的所有依赖关系?
经过几个小时的额外挖掘来解决这个问题,我在问题中描述的内容完美无缺。我的问题出现在一个复杂得多的对象中,该对象具有许多引用许多其他 类 的属性。其中一个属性保持了依赖性。这是一个 non-problem,但在途中学到了很多东西!
确定问题是否来自剩余依赖项的一个好方法是实施问题中描述的内容。一些极其简单的对象,它们以最简单的方式相互关联。如果那个简单的例子不起作用,问题就出在别处。如果有效,则表示您要加载的对象中存在依赖项。
假设我有:
- 我们将在下文中称为
BaseObjects
的包 A - 项目 B 将
BaseObjects
安装为依赖项并为BaseOjects
中定义的某些 class 定义子 class
- 项目 C 将
BaseObjects
作为依赖项安装,但无法以任何方式访问项目 B
让我们调用 BaseObjects
中定义的 class 之一:Point
。另一个 class 称为 Line
,它将 2 Point
个实例 p1
和 p2
.
包 B 实现了 class PointB(Point)
。因此,对象 PointB
也是 BaseObjects.Point
.
在与项目 B 相关的环境中,我创建了一个使用 2 个 PointB
对象的对象 Line
。我使用 PointB
实现的特殊方法进行各种操作。
我现在想 pickle 这个 Line
对象,以便它可以加载到项目 C 中。为此,我不能保留 PointB
个实例。因此,我需要将它们“重新class”为仅 superclass 的类型。我做 p1.__class__ = Point
和 p2.__class__ = Point
。我检查:isinstance(p1, PointB)
计算结果为 False
,与 p2
相同。
因此,我认为以这种方式腌制的对象可以从项目 C 中读取,因为它依赖于 BaseObjects
,它定义了 class Point
.
事实并非如此。当我在项目 C 中加载 pickle 文件时,它会查找我在项目 B 中定义子 classes 的文件夹。但是,当我深入研究对象时,我没有找到任何 link .据说所有对象都是 BaseObjects.<class_name>
我在摆脱此对象对项目 B 的依赖性的过程中出了什么问题?有没有办法查看一个对象的所有依赖关系?
经过几个小时的额外挖掘来解决这个问题,我在问题中描述的内容完美无缺。我的问题出现在一个复杂得多的对象中,该对象具有许多引用许多其他 类 的属性。其中一个属性保持了依赖性。这是一个 non-problem,但在途中学到了很多东西!
确定问题是否来自剩余依赖项的一个好方法是实施问题中描述的内容。一些极其简单的对象,它们以最简单的方式相互关联。如果那个简单的例子不起作用,问题就出在别处。如果有效,则表示您要加载的对象中存在依赖项。