当前位置: 首页 > 面试题库 >

什么时候需要“自我”?

危文乐
2023-03-14
问题内容

我使用类只有很短的时间,编写方法时,我使所有变量都引用了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.attribute引用当前实例的属性。

您用于wx.Frame.__init__()引用父类的方法。

self如果仅引用所用方法(函数)的本地名称(变量),则不使用。

这些都不是“经验法则”,因为没有例外。

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

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

魔法 :)



 类似资料:
  • 问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须

  • 谷歌正在通过电子邮件通知Android位置权限的更改: 我们将于2016年10月15日进行更改,这将影响针对API版本21(Android 5.0、Lollipop)或更高版本的应用程序,这些应用程序使用ACCESS_FINE_LOCATION但没有明确具有“android.hardware.location.gps”用途功能。展望未来,这些应用程序将可安装在没有GPS硬件的设备上。在大多数情况下

  • 在回答“亚马逊DynamoDB吞吐量是如何计算和限制的?”有人建议,只要超出每秒预配的吞吐量,DynamoDB就会限制请求。然而,这与我的经验相矛盾。 我在一个表中发布了多行,通常行数远远超过了配置的写容量。这种情况会在短时间内发生。在某一点上,我甚至有5分钟的平均时间超过了规定的容量。OTOH,平均15分钟低于容量。在那段时间里,我没有收到任何限制性的请求。 15分钟的平均峰值远低于规定的容量:

  • 如题, 在将包含汉字的数据转json存的时候,什么时候需要转unicode存储,什么时候不需要 如下: {"subject":"\u6395\u7268\u51ef\u86c1"} {"subject":"吃饭了没"}

  • 问题内容: 当我尝试按照本指南进行SQLAlchemy Relation Example时:基本关系模式 我有这个代码 它运作良好,但是在指南中,该模型应为: 为什么我不需要或在我的示例中?什么时候应该使用其中一个? 问题答案: 如果使用,则无需在第二个表上声明关系。 如果 不 使用,并分别定义,则如果不使用,则sqlalchemy将不知道如何连接关系,因此修改一个也将修改另一个。 因此,在您的示