我正在学习优秀的“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 文件中的所有其他内容并将其也导入。
