1
from PySide.QtCore import *

class Eggs(QObject):
    evt_spam = Signal()
    print "Loaded"

a = Eggs()
b = Eggs()
print a.evt_spam
print b.evt_spam
print a.evt_spam is b.evt_spam

输出:

Loaded
<PySide.QtCore.Signal object at 0xa2ff1a0>
<PySide.QtCore.Signal object at 0xa2ff1b0>
False

“加载”只打印一次(如预期的那样;它是一个类变量),但为什么要创建信号的 2 个实例(如果它也是一个类变量)?

4

1 回答 1

3

创建类实例时不会打印它,而是在执行类范围时打印。即使我从未创建过“测试”实例,此代码也会打印“已加载”。

class Test:
    print "Loaded"

如果您想在类初始化时运行代码,请查看__init__(). 此代码将在创建实例时打印“已加载”,而不是在定义类本身时。

class Test:
    def __init__(self):
        print "Loaded"

当您初始化类的新实例时,QT 的 QObject 元类似乎正在重写类属性以防止重复信号。也许您可以像这样分配属性:

class Test(QObject):
    def __init__(self, signal):
        self.evt_spam = signal

sig = Signal()
a = Test(sig)
b = Test(sig)

或这个:

class Test(QObject):
    def signal(self, signal):
        self.evt_spam = evt_spam
        return self

evt_spam = Signal()
a = Test().signal(evt_spam)
b = Test().signal(evt_spam)
于 2011-09-28T01:13:36.847 回答