首页 > 解决方案 > 尽管看似独立,但对象依赖性仍然存在

问题描述

假设我有:

让我们调用BaseObjects:中定义的类之一Point。另一个类被称为Line属性 2 个Point实例p1p2.

包 B 实现了一个类PointB(Point)。因此,这些对象PointB也是 的实例BaseObjects.Point

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

我现在想腌制这个Line对象,以便它可以加载到项目 C 中。为此,我无法保留PointB实例。因此,我需要将它们“重新分类”为仅属于超类的类型。我做p1.__class__ = Pointp2.__class__ = Point。我检查:isinstance(p1, PointB)评估为False,同样为p2

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

事实并非如此。当我在项目 C 中加载 pickle 文件时,它会查找我在项目 B 中定义子类的文件夹。但是,当我挖掘对象时,我没有找到任何链接。所有的对象都被称为类型BaseObjects.<class_name>

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

标签: pythonoopobjectdependencies

解决方案


在研究了这个问题几个小时后,我在问题中描述的内容完美无缺。我的问题出现在一个更复杂的对象中,其中许多属性引用了许多其他类。其中一个属性保持了依赖关系。这不是问题,但在途中学到了很多东西!

找出问题是否来自剩余依赖项的一个好方法是实现问题中描述的内容。一些极其简单的对象,它们以最简单的方式相互关联。如果该简单示例不起作用,则问题来自其他地方。如果它有效,则意味着您尝试加载的对象中存在依赖项。


推荐阅读