PySideのシグナルとスロットのページには、「シグナルはインスタンスが所有するランタイム オブジェクトであり、クラス属性ではありません」と記載されています。どうやら QObject コンストラクターはシグナルのクラス属性を調べて、それらをオブジェクトインスタンスにコピーします。これは私のテストプログラムによって確認されています。
PySideインポートQtCoreから
class Klass(QtCore.QObject):
lst = []
sig = QtCore.Signal(str)
def main():
obj1 = Klass()
obj2 = Klass()
print "id: obj1.lst = {}, obj1.sig = {}".format(id(obj1.lst), id(obj1.sig))
print "id: obj2.lst = {}, obj2.sig = {}".format(id(obj2.lst), id(obj2.sig))
print "id: klass.lst = {}, klass.sig = {}".format(id(Klass.lst), id(Klass.sig))
if __name__ == '__main__':
main()
私の出力では、lst-member の id がオブジェクトとクラスの両方で同じであるのに対し、現在 3 つのシグナル オブジェクトがあることがわかります。
id: obj1.lst = 4317739344, obj1.sig = 4297560376
id: obj2.lst = 4317739344, obj2.sig = 4297560400
id: klass.lst = 4317739344, klass.sig = 4317851072
オブジェクト属性を暗黙的に作成することは混乱を招くだけであり、したがって悪いスタイルです(IMHO)。多分彼らにはこれには正当な理由がありますが、私にはわかりません。私の質問は、コンストラクターでシグナルを通常の属性として作成するだけでなく、なぜこのソリューションを選択したのですか?