导入创建新对象的方法

时间:2014-04-12 01:12:09

标签: python

在包含创建新对象的方法时,我对导入方法感到困惑。我很难解释,因为我仍然在学习语言,但这是一个正在发生的事情的例子。

我有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,但错误仍然存​​在。

如果需要更多代码。我会把它添加到帖子中。请让我知道

2 个答案:

答案 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

看看如果没有错误会发生什么,代码就像你写的一样完成:

  1. 界面导入addFood
  2. addFood导入macrocalc
  3. macrocalc进口界面
  4. 界面导入addFood
  5. addFood导入macrocalc
  6. macrocalc进口界面
  7. ...

    您需要在某处删除import语句以防止无限循环导入。