Python空闲和终端导入差异

时间:2012-11-24 15:17:54

标签: python terminal python-idle

我刚开始使用Python,我有一个关于空闲与终端的问题。

在空闲时,我创建了一个名为Robot.py的文件

我有一个名为Robot的课程

class Robot(object)

    def __init__(self,x,y):
        #some code here etc...

def HelloWorld()
    print "Hello World!"

我有另一个名为testrobot.py的文件,看起来像这样:

import Robot
r = Robot(1,4)

在空闲时,我可以在运行testrobot.py时成功创建一个Robot对象。但是在终端中,它会给出错误消息NameError: Robot is not defined

我不确定如何在终端中运行我的程序。

此外:

如何在外部文件(例如testrobot.py)中调用Robots.py中的HelloWorld()函数而不调用Robot类?

提前致谢!

2 个答案:

答案 0 :(得分:2)

在IDLE中加载和运行脚本时,会自动为解释器加载它们。这意味着只要您在IDLE中运行脚本,Python shell就已经定义了这些类型。

如果要从IDLE外部运行它,即不先运行模块,则需要从该模块导入Robot。为此,您导入模块,而不是类型:

import Robot
myRobot = Robot.Robot(...)

或者,如果您想直接使用Robot,则需要使用from ... import语法:

from Robot import Robot
myRobot = Robot(...)

类似地,您可以在第一种情况下使用Robot.HelloWorld来调用您的函数,或者如果您在第二种情况下将HelloWorld添加到导入列表,则可以直接调用您的函数:

from Robot import Robot, HelloWorld
myRobot = Robot(...)
HelloWorld()

正如您所看到的,将文件命名为小写通常是个好主意,因为它们是模块名称(或其他语言中的“名称空间”)。

答案 1 :(得分:1)

您正在尝试创建导入类,而不是导入的类。

您正尝试使用该导入语句导入名为Robot.py的文件。要导入机器人类,您必须键入import Robot,然后编写Robot.Robot(1,4)以创建它的对象。或者,您可以从文件中导入所有引用:from Robot import *,然后编写Robot(1,4)

它与IDLE一起使用的原因是它基本上从您运行的文件中导入所有内容,允许您使用该文件中的方法和类。

相关问题