我正在通过出色的“ Python困难之路”进行工作,并将以下代码复制到名为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如何处理名称空间。您可以通过导入将某些内容导入当前名称空间,但是如何将名称空间从一个文件合并到另一个文件具有很大的灵活性。例如,

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文件中的所有其他内容并将其导入。

10-04 14:54