一个python'超级'的解释

时间:2014-04-29 19:06:46

标签: python wxpython superclass

我是Python新手,所以我仍然对面向对象编程感到困惑,现在有一天我对“超级”编程感到困惑。功能。请查看下面的代码(来自ZetCode wxPython教程):

import wx

class Example(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs) 

        self.InitUI()

    def InitUI(self):    

        menubar = wx.MenuBar()
        fileMenu = wx.Menu()
        fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
        menubar.Append(fileMenu, '&File')
        self.SetMenuBar(menubar)

        self.Bind(wx.EVT_MENU, self.OnQuit, fitem)

        self.SetSize((300, 200))
        self.SetTitle('Simple menu')
        self.Centre()
        self.Show(True)

    def OnQuit(self, e):
        self.Close()

def main():

    ex = wx.App()
    Example(None)
    ex.MainLoop()    


if __name__ == '__main__':
    main()

现在你看到第5/6行已经使用了super。据我所知*标记多个变量和**标记词典。我在这里有两个问题:

  1. 例如,如果你有一个B类是A的子类,你会写super(B, self).__init__(),它会初始化父的构造函数。您看到init()中没有传递任何参数。将参数传递给init()时会发生什么情况,就像上面的代码__init__(*args, **kwargs)一样?

  2. 您刚刚将*args**kwargs声明为参数,但在整个代码中,您没有将任何值传递给参数。在我看来,声明一个带参数的函数,从不使用它

1 个答案:

答案 0 :(得分:1)

尝试阅读Raymond Hettinger's review。这是一个很好的概述,我认为它可以解决你正在努力解决的问题。