Python 未定义回溯类

Python 未定义回溯类,python,Python,我有一个正在进行的项目,它引用了其他类中的几个类 代码: 试试看: 从PyQt5导入QtWidgets 从PyQt5.QtWidgets导入QApplication、QMainWindow、QPushButton 除: 输入('请在使用GUI系统之前安装PyQt5。(按enter键关闭)') 退出() 类应用程序(QApplication): 定义初始化(自): 超级(应用程序,自我)。\uuuuu初始化\uuuuuuuu([])) 打印('正在运行') andGate=gate() andGa

我有一个正在进行的项目,它引用了其他类中的几个类

代码:

试试看:
从PyQt5导入QtWidgets
从PyQt5.QtWidgets导入QApplication、QMainWindow、QPushButton
除:
输入('请在使用GUI系统之前安装PyQt5。(按enter键关闭)')
退出()
类应用程序(QApplication):
定义初始化(自):
超级(应用程序,自我)。\uuuuu初始化\uuuuuuuu([]))
打印('正在运行')
andGate=gate()
andGate.config('and',2)
def initUI(self):
newAndBtn=QPushButton(自)
newOrBtn=QPushButton(自)
newXorBtn=QPushButton(自)
def newAndGate(自):
通过
类门():
gateType='none'
_in=[]
_out=引脚输出()
定义初始(自我):
_in.append(pinIn())
_in.append(pinIn())
通过
def配置(自身、网关类型、输入目标):
#只是一些安全检查
如果gateType不在supportedGates中:
返回错误
self.gateType=网关类型
如果类型(输入目标)未列出:
返回错误
对于输入目标中的i:
如果类型(i)不是插脚:
返回错误
self.gateType=网关类型
对于范围内的i(len(self.\u in)):
[i]点中的self.\u(输入目标[i])
def更新(自我):
如果[0]中的_.fetch()和[1]中的_.fetch():
_out.set(真)
其他:
_out.set(假)
打印(“更新{}”。格式(自))
类pinIn():
值=真
参考=无
定义初始化(自):
通过
def点(目标):
如果类型(目标)不是连接输出:
返回错误
参考=目标
def fetch():
self.value=reference.value
回归自我价值
类pinOut():
值=假
定义初始化(自):
通过
def集合(自身,新值):
如果类型(newValue)不是bool:
返回错误
self.value=newValue
创建app()类的实例时,会得到一个回溯:

Traceback (most recent call last):
  File "C:\Users\ccronk22\Documents\Python_Scripts\Logic\run.py", line 1, in <module>
    import main
  File "C:\Users\ccronk22\Documents\Python_Scripts\Logic\main.py", line 8, in <module>
    class app(QApplication):
  File "C:\Users\ccronk22\Documents\Python_Scripts\Logic\main.py", line 23, in app
    class gate():
  File "C:\Users\ccronk22\Documents\Python_Scripts\Logic\main.py", line 26, in gate
    output = pinOut()
NameError: name 'pinOut' is not defined
回溯(最近一次呼叫最后一次):
文件“C:\Users\ccronk22\Documents\Python\u Scripts\Logic\run.py”,第1行,在
进口干管
文件“C:\Users\ccronk22\Documents\Python\u Scripts\Logic\main.py”,第8行,在
类应用程序(QApplication):
应用程序中第23行的文件“C:\Users\ccronk22\Documents\Python\u Scripts\Logic\main.py”
类门():
文件“C:\Users\ccronk22\Documents\Python\u Scripts\Logic\main.py”,第26行,在gate中
输出=引脚输出()
NameError:未定义名称“pinOut”
我曾尝试将pinIn和pinout类移到gate类中,然后将它们全部移到app类中,但这些都不起作用。在此之前,我一直将_-in声明为包含两个pinIn实例的列表,但得到了相同的错误


为什么gate类看不到pinIn和pinout类?

pinout
是在引用它之后定义的:

class gate():
gateType='none'
_in=[]
_out=pinOut()#此处引用
...
类pinOut():#在此处定义
...
引脚输出
的定义移到
的定义之前,或者最好在
\uuuuu init\uuuu
中设置它:

class gate():
gateType='none'
定义初始化(自):
self._in=[pinIn(),pinIn()]
self.\u out=pinOut()

您应该更喜欢在
\uuuuu init\uuuuu
中初始化东西的原因是,这样可以避免在多个实例之间共享状态,这很可能是您想要避免的。

gate.\u out
是一个类属性,在创建
类的过程中创建的-但是
引脚
在代码中还没有定义。将
pinOut
的定义移到上面的
gate
可以解决这个问题,尽管我认为这里真正的错误是将此引用设为class属性-这意味着您只能创建
gate
的单个实例,因为任何其他实例都将共享相同的输入和输出。因此,这将解释为什么我可以从app类引用gate类。我是从内部的函数调用的。我想所有的类和定义都是在调用任何init函数之前加载的。我还假设由于执行中断,app类中的init函数没有被调用。谢谢大家!@AwesomeCronk:是的,您放在类主体中的东西会立即执行,而您放在
\uuuu init\uuuu
中的东西只有在实例化类时才会执行。如果代码中有一些未执行的
\uuuuu init\uuuu
,请注意打字错误(
\uu init\uuuuu
\uuuu init\uuu