Python名称错误问题

Python名称错误问题,python,cpython,nameerror,Python,Cpython,Nameerror,我有一些编程经验,但我对python非常陌生,我正在尝试了解如何使用和导入.py文件中的类,而不是main文件。我目前正在使用netbeans,运行cpython3.2.1 现在使用我的设置,我的所有.py文件都在同一个文件夹中。忽略内容的实际内容,它看起来是这样的: pythonprogram.py from otherfile import * obj = classB() print(obj.run()) def method1(): dostuff otherfile.py i

我有一些编程经验,但我对python非常陌生,我正在尝试了解如何使用和导入.py文件中的类,而不是main文件。我目前正在使用netbeans,运行cpython3.2.1

现在使用我的设置,我的所有.py文件都在同一个文件夹中。忽略内容的实际内容,它看起来是这样的:

pythonprogram.py

from otherfile import *
obj = classB()
print(obj.run())

def method1():
   dostuff
otherfile.py

import pythonprogram

class classA:
   def __init__(self, thing1=None, thing2=None):
       self.thing1 = thing1
       self.thing2 = thing2
   def run():
       pythonprogram.method1()
       return something

class classB(classA):
    def __init__(self):
        super(thing1=None, thing2=None) #this will be more meaningful later
    def run():
        do some stuff
        return super().run()
一旦到达创建obj的行,就会出现以下错误:

Traceback (more recent call last):
    C:\users\me\projects\pythonprogram.py in line 4 in <module>
        from room import *
    C:\users\me\projects\otherfile.py in line 4 in <module>
        import pythonprogram
    C:\users\me\projects\pythonprogram.py in line 13 in <module>
        obj = classB()
回溯(最近一次调用):
中第4行的C:\users\me\projects\pythonprogram.py
从房间导入*
中第4行的C:\users\me\projects\otherfile.py
导入python程序
中第13行的C:\users\me\projects\pythonprogram.py
obj=classB()
由于不熟悉python,有人可能想让我知道我对super的使用是否正确,现在我开始考虑它,但这不是重点(当然也不是我现在正在处理的错误)

我很难找到与我所犯错误直接相关的教程或其他问题,但这可能只是因为我对python如此不熟悉,以至于在看到python时忽略了它;所以,如果有人想给我指出正确的教程,那也没关系

否则,我只想知道我在如何设置一切方面做错了什么,以及我应该如何纠正它


<>如果有帮助,我首先学习java,也可以使用C++和C++。Python在这方面不如其他一些语言灵活,这是因为定义事物的顺序方式。在您的情况下,
pythonprogram
需要
classB
来自
otherfile
才能定义
method1
。但是
otherfile
需要
method1
才能定义
classB


有时,您可以通过将
import
行进一步向下移动模块来解决循环导入问题。但解决这一问题的最佳方法是完全避免模块之间的双向依赖关系。它通常会产生更干净、设计更好的程序。

如果您想将pythonprogram.py用作模块,可以按如下方式进行更改:

from otherfile import *

def method1():
   print "dosomthing"

if __name__ == "__main__":
    obj = classB()
    print(obj.run())

当您运行pythonprogram.py时,条件name=“main”将为真,当您从其他模块导入pythonprogram时,name=“main”将为假。

在它的最基本级别上,您试图在定义它之前调用
method1()

本质上,您正在调用
classB
,后者反过来调用
classA
,后者试图调用
method1
,但您首先要做的是,在定义
方法之前的一行上,
classB()


摆脱这一混乱局面的最简单方法是将所有内容(除了代码中实际处理内容的部分)移到文件的末尾。

我想我能理解为什么这会是一个问题。我将尝试将这些依赖性排除在我的程序之外。非常感谢。这确实解决了我的问题。谢谢