wxPython中的OnInit和__init__

时间:2014-01-09 11:00:39

标签: python constructor wxpython

我正在学习wxPython。在其中一个示例中,代码如下:

import wx

class App(wx.App):    
    def OnInit(self):
        frame = wx.Frame(parent=None, title = 'bare')
        frame.Show()
        return True


app=App()
app.MainLoop()

我注意到类App没有构造函数,只有函数OnInit。据我所知,Python类是用__init__函数构建的。

那么,OnInit函数是针对特定类的吗?或者它是另一种类型的构造函数?

请原谅我的无知,因为我是新手。感谢。

2 个答案:

答案 0 :(得分:4)

根据wx.App.__init__ documentation

  

您应该覆盖OnInit以执行应用程序初始化以确保   系统,工具包和wxWidgets已完全初始化。

- > OnInit方法仅适用于派生wx.App的类。

答案 1 :(得分:1)

假设你从" wxPython in Action"获得了代码。书 - 好书会推荐,

接着说(我相信你现在已经把它变红了)......

  

请注意,我们没有为应用程序定义 init ()方法   类。在Python中,这意味着父方法,   wx.App。 init (),在对象创建时自动调用。这个   是一件好事。如果您定义自己的 init ()方法,请不要   忘记调用基类的 init (),如下所示:

class App(wx.App): 
     def __init__(self): 
         # Call the base class constructor. 
         wx.App.__init__(self) 
         # Do something here...
  

如果你忘记这样做,wxPython将不会被初始化,你的OnInit()方法也不会被调用。