Python 如何设置以X实例为参数的pyqtSignal(类X的变量)的类型

Python 如何设置以X实例为参数的pyqtSignal(类X的变量)的类型,python,pyqt,signals,pyqt5,Python,Pyqt,Signals,Pyqt5,我有一个pyqtSignal作为类变量,我希望它的参数是该类的一个实例。创建信号时,如何声明参数的类型 class MyClass(QWidget): my_signal = pyqtSignal(?) (...) def emit_signal(self): self.my_signal.emit(self) 我知道pyqtSignal(object)可以工作,但我想知道在类变量级别是否有一种\uuuuuuu类 另一个问题是:pyqtSignal(

我有一个pyqtSignal作为类变量,我希望它的参数是该类的一个实例。创建信号时,如何声明参数的类型

class MyClass(QWidget):
    my_signal = pyqtSignal(?)

    (...)

    def emit_signal(self):
        self.my_signal.emit(self)
我知道
pyqtSignal(object)
可以工作,但我想知道在类变量级别是否有一种
\uuuuuuu类


另一个问题是:
pyqtSignal(MyClass)
pyqtSignal(QWidget)
(父类)或
pyqtSignal(对象)
?演出我问这个问题是因为当我们用
@pyqtSlot
装饰器声明时隙参数的类型似乎并不重要。

在Python解释器解释
my_signal=pyqtSignal(…)
时,它还不知道类名,首先创建类主体,然后将其分配给名为
MyClass
的模块变量。因此,唯一的方法是在定义类之后,在尝试访问信号对象之前。这意味着以下两个选项之一可能会起作用(这取决于pyqtSignal和QObject的工作方式,我现在无法尝试):

  • 在模块级,课后:

    class MyClass(QObject):
        def __init__(self, ...):
    ...
    
    MyClass.my_signal = pyqtSignal(MyClass)
    
  • 在初始化中,防止重新创建:

    class MyClass(QObject):
        def __init__(self, ...):
            if not hasattr(self, 'my_signal'):
                MyClass.my_signal = pyqtSignal(MyClass)