2014-08-28 24 views
1

我正在閱讀關於wxPython的流行發佈。在下面列出的代碼中,用於創建2個不同的wx.Frame子類,使用「self」似乎讓我感到困惑和不一致。第一個代碼示例中的變量在它們前面有自己,而第二個代碼示例中的變量沒有。爲什麼會選擇使用自我,什麼時候不需要/適當。在Python和wxPython中使用「self」

class MouseEventFrame(wx.Frame): 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, parent, id, 'Frame With Button',size=(300, 100)) 
     self.panel = wx.Panel(self) 
     self.button = wx.Button(self.panel,label="Not Over", pos=(100, 15)) 
     self.Bind(wx.EVT_BUTTON, self.OnButtonClick,self.button) 
     self.button.Bind(wx.EVT_ENTER_WINDOW,self.OnEnterWindow) 
     self.button.Bind(wx.EVT_LEAVE_WINDOW, 
     self.OnLeaveWindow) 


class InsertFrame(wx.Frame): 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, parent, id, 'Frame With Button',size=(300, 100)) 
     panel = wx.Panel(self) 
     button = wx.Button(panel, label="Close", pos=(125, 10),size=(50, 50)) 
     self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button) 
     self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) 
+4

no self == [局部變量](http://en.wikipedia.org/wiki/Local_variable)。 'self.' ... == [實例變量](http://en.wikipedia.org/wiki/Instance_variable)。 – 2014-08-28 22:01:22

+2

第一個代碼想要在這兩個屬性中直接引用面板/按鈕,第二個代碼不會。沒有比這更深的。 – roippi 2014-08-28 22:02:15

+0

哦,好的。謝謝。所以對於像self.Bind(...)這樣的方法,我假設自己意味着不同的東西? – BPoy 2014-08-29 00:02:08

回答

0

一般(這是@ roippi的評論的改述),說self.panel = ...使得它,所以你以後可以訪問self.panel。它長期存儲數據。但是,如果您鍵入panel = ...,則無法在此方法之外訪問名爲panel的變量。

+0

感謝您的幫助。所以當在綁定中使用「self」時,我覺得它說的是「在這個框架類的實例中,將其綁定到該類上」。那是對的嗎? – BPoy 2014-08-29 12:28:36

+0

使用self.Bind時,Bind是從wx.Frame繼承的方法。 – Yoriz 2014-08-29 12:37:05

相關問題