【问题标题】:Importance of keyword self?关键字self的重要性?
【发布时间】:2014-07-18 05:48:29
【问题描述】:

我正在阅读 ZetCode 的 PyQt4 GUI 开发教程。他给出了以下用于制作工具栏的代码 -

self.toolBar = self.addToolBar('Exit')`
self.toolBar.addAction(exitAction)

这个添加一个menuBar -

menuBar = self.menuBar()                                            
fileMenu = menuBar.addMenu('&File')
fileMenu.addAction(exitAction) 

这里的self是QtGui.QMainWindow的父类。

我不明白他为什么在第一个示例中使用 self.toolBar 而在第二个示例中不使用 self.menuBar。

【问题讨论】:

    标签: python python-2.7 pyqt4


    【解决方案1】:

    在您的第二种情况下,menuBar 是对self.menuBar() 的引用,如下代码,

    menuBar = self.menuBar()                                            
    fileMenu = menuBar.addMenu('&File')
    fileMenu.addAction(exitAction)
    

    简单地归结为

    fileMenu = self.menuBar().addMenu('&File')
    fileMenu.addAction(exitAction)
    

    这与您拥有的第一段代码没有什么不同

    self.toolBar = self.addToolBar('Exit')`
    self.toolBar.addAction(exitAction)
    

    所以,如果你问

    我不明白他为什么在第一个示例中使用 self.toolBar 但是 在第二个示例中不使用 self.menuBar。

    这是因为编程风格和可读性因程序员而异。

    【讨论】:

      【解决方案2】:

      在变量名的开头添加self 使其成为成员变量实例变量。当您创建 mainWindow 的实例时,QMainWindow 上已经存在 menuBar。因此,无需在成员变量中保存对 menuBar 的引用,因为您可以随时通过调用 self.menuBar() 在代码的任何部分中检索它。另一方面,在mainWindow上创建toolBar时是不存在的,需要调用self.addToolBar()添加,并将toolBar的引用保存在成员变量中,以便在代码的任意部分对toolBar进行操作。

      【讨论】:

        【解决方案3】:

        其实作者确实用self.menuBar()

        menuBar = self.menuBar()
        

        以上使menuBar引用self.menuBar()返回的对象。

        【讨论】:

          【解决方案4】:
          menuBar = self.menuBar()                                            
          

          这表明self已经对其菜单栏有所感知。此方法调用可能会检索一个预先存在的对象,因此无需将其存储在实例上,也不一定适合这样做(例如,它实际上是其他人的菜单栏并且该类只是在操作它) .

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-04
            • 1970-01-01
            • 1970-01-01
            • 2010-12-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-15
            相关资源
            最近更新 更多