【发布时间】:2019-05-08 01:18:27
【问题描述】:
当我尝试将现有函数作为成员函数合并到类中时,就会出现问题。我有一个类似这样的设置:
类:
base(object)
primitive(base)
square(primitive)
union(primitive)
我有一个名为union 的函数,用户调用它返回一个union 原始对象。
obj1 = square()
obj2 = square()
obj3 = union(obj1, obj2) #this is the union function which returns a union primitive
我希望用户也可以这样做
obj3 = obj1.union(obj2)
这就是问题出现的地方。 primitive 类需要导入union 函数,该函数又导入union 类,该类又导入primitive 类,我遇到了循环依赖错误。是否有一种聪明的方法来重构代码或更改导入语句以使其正常工作?
编辑:
为了清楚起见,这是代码的结构:
operations/union.py(函数)
from objects import union as _union #the union class
def union(obj1, obj2): #the union function
#CODE
return _union(args)
objects/union.py(类)
from objects import primitive
class union(primitive):
#CODE
objects/primitive.py
from operations import union #the function
class primitive(base):
#CODE
def union(self, obj2):
return union(self, obj2)
有一个名为union 的类,它是一个包含联合输入对象信息的对象。用户不与此交互。然后是用户可以调用的union 函数,它返回一个union 对象。我希望primitive 类包含一个名为union 的成员函数,它使用我已经编写的union 函数。问题是union 函数返回一个继承自primitive 类的union 对象。这会导致循环依赖问题。我可以删除 union 成员函数,但用户不能这样做
obj3 = obj1.union(obj2)
【问题讨论】:
-
你能提供一个minimal reproducible example吗?你的图表对我来说没有意义。 Union 是一个类还是一个函数? 究竟发生了什么?无论如何,只要把这些东西放在同一个模块中,你的循环依赖就可以解决了。
-
让我知道该编辑是否可以解决问题
-
为什么不把所有的类放在同一个模块中呢?还是把
union类和union函数放在同一个模块中?
标签: python circular-dependency