我是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。据我所知*标记多个变量和**标记词典。我在这里有两个问题:
例如,如果你有一个B类是A的子类,你会写super(B, self).__init__()
,它会初始化父的构造函数。您看到init()
中没有传递任何参数。将参数传递给init()
时会发生什么情况,就像上面的代码__init__(*args, **kwargs)
一样?
您刚刚将*args
和**kwargs
声明为参数,但在整个代码中,您没有将任何值传递给参数。在我看来,声明一个带参数的函数,从不使用它