Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尽管看似独立,但对象依赖性仍然存在_Python_Oop_Object_Dependencies - Fatal编程技术网

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

Python 尽管看似独立,但对象依赖性仍然存在,python,oop,object,dependencies,Python,Oop,Object,Dependencies,假设我有: 下面我们将调用BaseObjects的包 将BaseObjects安装为依赖项并为BaseObjects 作为依赖项安装BaseObjects,但不以任何方式访问项目B的项目C 让我们调用BaseObjects:Point中定义的一个类。另一个类称为Line,它将点实例p1和p2作为属性 包B实现了一个类PointB(Point)。因此,对象PointB也是BaseObjects.Point的实例 在与项目B相关的环境中,我创建了一个使用2个PointB对象的对象Line。我使用

假设我有:

  • 下面我们将调用
    BaseObjects
    的包
  • BaseObjects
    安装为依赖项并为
    BaseObjects
  • 作为依赖项安装
    BaseObjects
    ,但不以任何方式访问项目B的项目C
让我们调用
BaseObjects
Point
中定义的一个类。另一个类称为
Line
,它将点
实例
p1
p2
作为属性

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

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

现在我想pickle这个
对象,这样它就可以加载到项目C中。为此,我不能保留
点B
实例。所以,我需要“重新分类”它们,使其仅属于超类的类型。我做了
p1.\uuuuu class\uuuu=Point
p2.\uuuuu class\uuuu=Point
。我检查:
isinstance(p1,b点)
的计算结果为
False
,与
p2
的计算结果相同

因此,我认为以这种方式pickle的对象可以从projectc中读取,因为它依赖于定义类
点的
BaseObjects

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


在我摆脱这个对象对项目B的依赖性的过程中,有什么不对?有没有办法查看一个对象的所有依赖项?

经过几个小时的深入研究这个问题后,我在问题中描述的内容非常有效。我的问题出现在一个更为复杂的对象中,该对象具有许多引用许多其他类的属性。其中一个属性保持了依赖关系。这不是问题,但在路上学到了很多


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

通常,python中的“强制转换”是通过使用获取类实例的构造函数来完成的。在您的情况下:
点(点b)
。更改
\uuuu类\uuuuuu
有点老套。另请参见:@Wups,但是强制转换将更改对象地址,并且所有相关对象将丢失对它的引用。使用
\uuuuu class\uuuuu
允许我保持对此对象的所有引用有效。我可能没有使用正确的术语,似乎它被称为“重新分类”,从我正在编辑我的问题来看,这似乎是一件可以接受的事情。确定。我的建议只有在直线是唯一引用点对象的对象时才有意义。