Python NameError:名称未定义

新手上路,请多包涵

我有一个 python 脚本,但收到以下错误:

 Traceback (most recent call last):
  File "C:\Users\Tim\Desktop\pop-erp\test.py", line 1, in <module>
  s = Something()
  NameError: name 'Something' is not defined

这是导致问题的代码:

 s = Something()
s.out()

class Something:
    def out():
        print("it works")

这是在 Windows 7 x86-64 下使用 Python 3.3.0 运行的。

为什么找不到 Something 类?

原文由 user1899679 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 425
2 个回答

在使用之前定义类:

 class Something:
    def out(self):
        print("it works")

s = Something()
s.out()

您需要将 self 作为所有实例方法的第一个参数传递。

原文由 Blender 发布,翻译遵循 CC BY-SA 3.0 许可协议

请注意,有时您会希望在其自己的定义中使用类类型名称,例如在使用 Python Typing 模块时,例如

class Tree:
    def __init__(self, left: Tree, right: Tree):
        self.left = left
        self.right = right

这也会导致

NameError: name 'Tree' is not defined

那是因为此时尚未定义该类。解决方法是使用所谓的 Forward Reference ,即将类名包装在字符串中,即

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right

原文由 Tomasz Bartkowiak 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题