在包含创建新对象的方法时,我对导入方法感到困惑。我很难解释,因为我仍然在学习语言,但这是一个正在发生的事情的例子。
我有macrocalc.py
from interface import Interface
def main():
a = Interface();
print "Welcome!"
print "!hat would you like to do?"
a.display_options()
if __name__ == "main":
main()
稍后在我的代码中,我使用from marcocalc import main
导入main。然后我运行main()
方法。但是我得到了错误:
File "macrocalc.py", line 1, in <module>
from interface import Interface
File "/Users/username/Development/foodcalc/interface.py", line 1, in <module>
from addFood import addfood
File "/Users/username/Development/foodcalc/addFood.py", line 2, in <module>
from macrocalc import main
File "/Users/username/Development/foodcalc/macrocalc.py", line 1, in <module>
from interface import Interface
ImportError: cannot import name Interface
我的interface.py
:
from addFood import addfood
class Interface:
#options = ["1 - create a meal plan","2 - add food","3 - look up food"]
def display_options(self):
options = ["1 - create a meal plan","2 - add food","3 - look up food"]
for choice in options:
print choice
selection = int(raw_input())
if selection > 3:
print "Incorrect selection. Please try again."
self.display_options()
else:
print "You chose: ",
if selection == 1:
print "\'create a meal plan\'"
elif selection == 2:
print "\"add food\""
addfood()
else:
print "\"look up food\""
我尝试添加行from interface import Interface
,但错误仍然存在。
如果需要更多代码。我会把它添加到帖子中。请让我知道
答案 0 :(得分:2)
您已经介绍了可怕的循环依赖。
在macrocalc.py
,第1行:
# Call this A
from interface import Interface
在interface.py
,第1行:
from addFood import addfood
在addFood.py
,第2行:
from macrocalc import main
但现在我们又回到了A!
你必须重构你的程序,所以它不会这样做。 :)
答案 1 :(得分:1)
您已创建导入循环:
File "macrocalc.py", line 1, in <module>
from interface import Interface
File "/Users/username/Development/foodcalc/interface.py", line 1, in <module>
from addFood import addfood
File "/Users/username/Development/foodcalc/addFood.py", line 2, in <module>
from macrocalc import main
File "/Users/username/Development/foodcalc/macrocalc.py", line 1, in <module>
from interface import Interface
ImportError: cannot import name Interface
看看如果没有错误会发生什么,代码就像你写的一样完成:
...
您需要在某处删除import语句以防止无限循环导入。