我有一个可以描述为的模块 蟒
class Symbol():
def __init__(data):
self.data = data
pass
def __add__(self,other):
return Add(self,other)
class Integer(Symbol):
pass
class Add(Symbol):
def __init__(a,b):
self.data = [a,b]
我想将它分成三个文件,即symbol.py,integer.py和add.py;当然会有更多关于这些类的细节,所以将它们放在一个文件中是荒谬的。
出于某种原因,进口似乎从不起作用,虽然它甚至没有抱怨循环依赖,有人可以给我一些例子吗?
答案 0 :(得分:1)
您的循环依赖情况不可解决,因为Symbol
在定义时不依赖于Add
,仅在调用__add__
方法时。有两种好方法可以解决它。
第一个是让模块Symbol
在顶级导入Add
,但只在__add__
方法本身内执行。例如,如果您的模块以类(仅小写)命名,那么您将在symbol.py
中使用它:
class Symbol():
# ...
def __add__(self,other):
from add import Add
return Add(self,other)
另一种方法是将Add
全局导入symbol
模块,但在确定Symbol
类后执行。这样,当add
模块导回symbol
时,它总是能够看到Symbol
类的定义,即使模块的其余部分未完成加载。
class Symbol():
# same as in your current code
from add import Add
如果你采用第二种方法并且Symbol
类导入文件顶部的其他内容(通常放置import
语句),你可能想在该空间中添加注释大约Add
稍后导入(以及为什么)。