为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶刀刀 2023-09-05 20:18:50
假设我有:BaseObjects我们将在下面调用 A 包项目 B 作为依赖项安装BaseObjects并为中定义的某些类定义子类BaseOjects项目 C 作为依赖项安装BaseObjects,但无法以任何方式访问项目 BBaseObjects让我们调用:中定义的类之一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定义类的依赖项Point。事实并非如此。当我在项目 C 中加载 pickle 文件时,它会查找我在项目 B 中定义子类的文件夹。但是,当我深入研究该对象时,我没有找到任何链接。所有对象都被称为类型BaseObjects.<class_name>在我摆脱该对象对项目 B 的依赖的过程中出了什么问题?有没有办法查看对象的所有依赖关系?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

经过几个小时的额外研究这个问题后,我在问题中描述的内容非常有效。我的问题出现在一个更复杂的对象中,其中许多属性引用了许多其他类。这些属性之一保持了依赖性。这不是问题,但从中学到了很多东西!

确定问题是否来自剩余依赖性的一个好方法是实现问题中描述的内容。一些极其简单的对象以尽可能简单的方式相互关联。如果这个简单的例子不起作用,那么问题就来自其他地方。如果它有效,则意味着您尝试加载的对象中存在依赖项。


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信