【问题标题】:Python Idle and Terminal Import DifferencesPython 空闲和终端导入差异
【发布时间】:2012-11-24 15:17:54
【问题描述】:

我刚开始使用 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

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

还有:

如何调用我的 HelloWorld() 函数,该函数位于 Robots.py 中,但不属于外部文件(例如 testrobot.py)中的 Robot 类?

提前致谢!

【问题讨论】:

  • Robot r = (1, 4) 是无效的语法。无处不在。
  • 那是真正的delnan,这让我相信他把它复制到这里是错误的,因为它在空闲时工作。它给出的错误是“机器人未定义”。由于语法原因无法定义某些内容
  • 您的文件名也是“Robots.py”,并且您正在尝试导入“Robot”。这些名称不匹配
  • r = 机器人(1,4)。我会编辑我的帖子。我习惯于 C/Java 语法。我的代码更长,并且出现了一些复制错误

标签: python terminal python-idle


【解决方案1】:

当您在 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()

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多