Skip to main content
 首页 » 编程设计

python之命令行 Python 的莫名其妙的 NameError

2025年05月04日13lonelyxmas

我正在学习优秀的“Python The Hard Way”并将以下代码复制到名为 mystuff.py 的文件中:

class MyStuff(object): 
 
    def __init__(self): 
        self.tangerine = "And now a thousand years between" 
 
    def apple(self): 
        print "I AM CLASSY APPLES!" 

在终端中:

import mystuff 
 
thing = MyStuff() 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
NameError: name 'MyStuff' is not defined 

今天,其他简单类也经常出现这种情况。谁能告诉我我做错了什么?

请您参考如下方法:

您可能需要 thing = mystuff.MyStuff()(假设 mystuff 是类 MyStuff 所在的文件的名称)。

这里的问题是 python 如何处理命名空间。您可以通过导入将某些内容带入当前命名空间,但是将命名空间从一个文件合并到另一个文件的方式有很大的灵 active 。例如,

import mystuff 

将 mystuff(模块/文件级)命名空间中的所有内容带入您当前的命名空间,但要访问它,您需要 mystuff.function_or_class_or_data。如果你不想一直输入 mystuff,你可以更改你在当前模块(文件)中引用它的名称:

import mystuff as ms 

现在,您可以通过以下方式访问 MyStuff:

thing = ms.MyStuff() 

而且(几乎)最后,还有 from mystuff import MyStuff。在这种形式中,您将 MyStuff 直接带入您的命名空间,但 mystuff 中的任何其他内容都不会进入您的命名空间。

最后,(不推荐这个)from mystuff import *。这与前一个工作方式相同,但它还会获取 mystuff 文件中的所有其他内容并将其也导入。