python - 尽管看似独立,但对象依赖性仍然存在
问题描述
假设我有:
- 我们将
BaseObjects
在下面调用的包 A - 项目 B
BaseObjects
作为依赖项安装并为定义的某些类定义子类BaseOjects
- 项目 C
BaseObjects
作为依赖项安装,但无法以任何方式访问项目 B
让我们调用BaseObjects
:中定义的类之一Point
。另一个类被称为Line
属性 2 个Point
实例p1
和p2
.
包 B 实现了一个类PointB(Point)
。因此,这些对象PointB
也是 的实例BaseObjects.Point
。
在与项目 B 相关的环境中,我创建了一个Line
使用 2 个对象的PointB
对象。我使用PointB
实现的特殊方法进行各种操作。
我现在想腌制这个Line
对象,以便它可以加载到项目 C 中。为此,我无法保留PointB
实例。因此,我需要将它们“重新分类”为仅属于超类的类型。我做p1.__class__ = Point
和p2.__class__ = Point
。我检查:isinstance(p1, PointB)
评估为False
,同样为p2
。
因此,我认为以这种方式腌制的对象将从项目 C 中读取,因为它具有BaseObjects
定义 class的依赖项Point
。
事实并非如此。当我在项目 C 中加载 pickle 文件时,它会查找我在项目 B 中定义子类的文件夹。但是,当我挖掘对象时,我没有找到任何链接。所有的对象都被称为类型BaseObjects.<class_name>
在我摆脱这个对象对项目 B 的依赖的过程中出了什么问题?有没有办法查看对象的所有依赖项?
解决方案
在研究了这个问题几个小时后,我在问题中描述的内容完美无缺。我的问题出现在一个更复杂的对象中,其中许多属性引用了许多其他类。其中一个属性保持了依赖关系。这不是问题,但在途中学到了很多东西!
找出问题是否来自剩余依赖项的一个好方法是实现问题中描述的内容。一些极其简单的对象,它们以最简单的方式相互关联。如果该简单示例不起作用,则问题来自其他地方。如果它有效,则意味着您尝试加载的对象中存在依赖项。
推荐阅读
- scala - 直接引用内部案例类中的值或方法
- javascript - 如何在 JavaScript 中匹配二维数组中的对?
- python - 如何在数字所在的确切位置裁剪图像?
- java - 我的反向 LinkedList 程序出了什么问题,导致堆栈溢出错误。
- r - 删除 R 中的假负值
- pandas - 熊猫将值更改为 nan
- gradle - 如何使用 Gradle Kotlin DSL 为 FatJar 指定入口点 Main-Class?
- node.js - Nginx 反向代理 + ExpressJS + Angular + SSL 配置问题
- javascript - 使用 JQuery 将弹出窗口附加到页面后,如何在弹出窗口中播放 gif?
- java - Java 8 Wildfly 14 OutOfMemoryError 阶段安装