当前位置:  开发笔记 > 编程语言 > 正文

什么时候需要"自我"?

如何解决《什么时候需要"自我"?》经验,为你挑选了1个好方法。

我一直在使用类,当我编写一个方法时,我将所有变量引用为self,例如self.foo.

但是,我正在查看wxPython in Action一书,并注意到"self"并未一直使用.例如:

 import wx
 class TextFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Text Entry Example',
            size=(300, 100))
        panel = wx.Panel(self, -1)
        basicLabel = wx.StaticText(panel, -1, "Basic Control:")
        basicText = wx.TextCtrl(panel, -1, "I've entered some text!",
            size=(175, -1))
        basicText.SetInsertionPoint(0)
        pwdLabel = wx.StaticText(panel, -1, "Password:")
        pwdText = wx.TextCtrl(panel, -1, "password", size=(175, -1),
            style=wx.TE_PASSWORD)
        sizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)
        sizer.AddMany([basicLabel, basicText, pwdLabel, pwdText])
        panel.SetSizer(sizer)

下面的一个确实使用"自我".

import wx
class ButtonFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Button Example',
            size=(300, 100))
        panel = wx.Panel(self, -1)
        self.button = wx.Button(panel, -1, "Hello", pos=(50, 20))
        self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)
        self.button.SetDefault()
    def OnClick(self, event):
        self.button.SetLabel("Clicked")

如果我没记错的话,"self"是指类的特定实例,那么什么时候没必要呢?有一般的经验法则吗?



1> 小智..:

self.attribute用来引用当前实例的属性.

wx.Frame.__init__()用来引用父类的方法.

self如果您只引用您所在方法(函数)的本地名称(变量),则不使用.

这些不是"经验法则",因为没有例外.


在这个特定的例子中,你可能会感到困惑的是,面板似乎只是构造函数中的本地名称,因此一旦构造函数返回,面板就会消失.

但是,如果您查看文档wx.Panel,您将看到它的构造函数将面板附加到父窗口,因此即使在构造函数返回后它也将继续存在.

魔法 :)

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有