Python 尝试使用类时出现问题';其中有一个名字';s自己的类变量部分

Python 尝试使用类时出现问题';其中有一个名字';s自己的类变量部分,python,class,pyqt,class-variables,Python,Class,Pyqt,Class Variables,我现在正在用Python和PyQt编写一个应用程序,我遇到了一点问题。这个问题不需要了解PyQt本身,只需要了解python中的静态变量。我正在向一个类添加一些信号,当信号被触发时,该类将发出该类的实例 我拥有的是这样的东西: class Foo(QObject): # ... # Signals updated = pyqtSignal(Foo) moved = pyqtSignal(Foo) # ... Python给了我一个错误: NameErro

我现在正在用Python和PyQt编写一个应用程序,我遇到了一点问题。这个问题不需要了解PyQt本身,只需要了解python中的静态变量。我正在向一个类添加一些信号,当信号被触发时,该类将发出该类的实例

我拥有的是这样的东西:

class Foo(QObject):
    # ...
    # Signals
    updated = pyqtSignal(Foo)
    moved = pyqtSignal(Foo)
    # ...
Python给了我一个错误:

NameError: name 'Foo' is not defined

IIRC,这与类
Foo
绑定到globals时有关。我也不能在这里使用
self
。请提供有关如何解决此问题的任何帮助。

听起来像是信号传递自己的类变量。从这个参考。可能需要使用
QObject
。(不是
Foo
,但子类是相同的)

或者,如果你想传递任何对象,我想你可以使用
对象

class Foo(QObject):
    updated = pyqtSignal(object)
    moved = pyqtSignal(object)

您可以指定应该在pyqt connect信号中发出它的类。

问题是,在构造
Foo
时,对
updated=pyqtSignal(Foo)
语句进行求值,因此在求值该语句时,
Foo
不存在。。在一般情况下,您必须将其移到类定义之外,尽管可能存在一些pyqt魔力(例如,使用
QObject
而不是另一个答案中描述的
Foo
):


我将全力支持这个答案。我以前使用过
pyqtSignal(object)
通过信号传递对象。我还没有明确地将引用传递给类的一个实例,该类的信号是定义它(如您所希望的),但我不明白为什么它会与我以前所做的有任何不同。我曾想过使用
QObject
,但我决定不使用它。我想试一试,但是在类定义之后分配类变量不是很糟糕吗?不幸的是,这不起作用,因为信号需要在类结构中定义,而不是在类结构之外。谢谢你。
class Foo(...):
   ...

Foo.updated = pyqtSignal(Foo)