gpt4 book ai didi

python - 什么时候需要 "self"?

转载 作者:太空狗 更新时间:2023-10-29 17:47:28 26 4
gpt4 key购买 nike

我使用类的时间很短,当我编写一个方法时,我让所有变量都引用自身,例如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)

下面的确实使用了“self”。

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”是对类的特定实例的引用,那么什么时候不需要呢?有一般的经验法则吗?

最佳答案

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

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

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

这些不是“经验法则”,因为没有异常(exception)。


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

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

魔法:)

关于python - 什么时候需要 "self"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/280324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com