Python3。类,继承

亚力山大
...
from PyQt4.QtGui import * 
from PyQt4.QtCore import *

class UserInfoModalWindow(QDialog): 
    def init(self):                                
        super(UserInfoModalWindow, self).init() 
        self.dialog_window = QDialog(self) 
        ... 
        self.dialog_window.exec_() 
        ... 
    def quit(self): 
        self.dialog_window.close()

...

class AcceptDialogWindow(UserInfoModalWindow):
    def init(self):
        super(UserInfoModalWindow, self).init() 
        self.accept_dialog = QDialog()
        ...
        self.accept_button = QPushButton()
        self.cancel_button = QPushButton()
        ... 
        self.connect(self.accept_button, 
                     SIGNAL('clicked()'), 
                     lambda: self.quit()) 
        self.connect(self.cancel_button, 
                     SIGNAL('clicked()'), 
                     self.accept_dialog.close)
        ... 
        self.accept_dialog.exec_() 
    ... 
    # From this method I want to call a method from a parent class 
    def quit(self): 
        self.accept_dialog.close() 
        return super(UserInfoModalWindow, self).quit()

单击“取消按钮”时-仅关闭accept_dialog,这是正确的,但是单击“接受按钮”时,应关闭accept_dialog和dialog_window。

I get this error: File "app.py", line 252, in quit
return super(UserInfoModalWindow, self).quit() 
AttributeError: 'super' object has no attribute 'quit'

有什么问题 我做错什么了?

布鲁诺·德斯胡里尔斯

这里:

return super(UserInfoModalWindow, self).quit()

你要:

return super(AcceptDialogWindow, self).quit()

super()第一个参数应该是当前类(至少对于大多数用例而言)。实际上super(cls, self).method()是指:

  • 得到...的mro self
  • cls在mro中找到课程
  • 参加下一堂课(之后的课cls
  • 执行此类的方法

所以,super(UserInfoModalWindow, self)AcceptDialogWindow做出决议的父母UserInfoModalWindow,这是QDialog

请注意,在Python 3.x中,您无需传递任何参数super()-它会自动执行RightThing(tm)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章