3

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

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

我有一门叫机器人的课

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

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

还:

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

提前致谢!

4

2 回答 2

2

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

当您想从 IDLE 外部运行它时,即不先运行模块,您需要从该模块导入您的机器人。为此,您导入模块,而不是类型:

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()

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

于 2012-11-24T16:01:22.990 回答
1

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

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

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

于 2012-11-24T15:59:13.770 回答