selfPython 中这个词的目的是什么?我理解它指的是从该类创建的特定对象,但我不明白为什么它明确需要作为参数添加到每个函数.为了说明,在Ruby中我可以这样做:
class myClass
def myFunc(name)
@name = name
end
end
Run Code Online (Sandbox Code Playgroud)
我很容易理解.但是在Python中我需要包括self:
class myClass:
def myFunc(self, name):
self.name = name
Run Code Online (Sandbox Code Playgroud)
谁能跟我说说这个?这不是我在(无可否认的有限)经历中遇到的事情.
我通过一些pygame教程学习Python .
在那里我发现了关键字self的广泛使用,并且来自主要的Java背景,我发现我一直忘记键入self.例如,而不是self.rect.centerx我要输入rect.centerx,因为对我来说,rect已经是类的成员变量.
对于这种情况,我可以想到的Java并行是必须使用此前缀对成员变量的所有引用作为前缀.
我是否坚持使用self为所有成员变量添加前缀,或者有没有办法声明它们可以让我避免这样做?
即使我建议的不是pythonic,我仍然想知道它是否可能.
我已经看过这些相关的SO问题,但他们并没有完全回答我的想法:
我理解为什么self 始终是类方法的第一个参数,这是完全有道理的,但如果它总是如此,那么为什么要为每个方法定义经历打字的麻烦?为什么不在幕后自动完成?
是为了清楚还是在某种情况下你可能不想把自己作为第一个论点?
将this/ self/me指针强制显式有什么好处?
根据OOP理论,一个方法应该主要(仅?)对成员变量和方法的参数进行操作.在此之后,它应该是更容易指成员变量,而不是外部的(从视图中的对象的一侧)变量...明确this使得它更详细因而更难指成员变量,而不是外部因素.这对我来说似乎很直观.
我一直在使用类,当我编写一个方法时,我将所有变量引用为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)
Run Code Online (Sandbox Code Playgroud)
下面的一个确实使用"自我".
import wx
class ButtonFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Button Example',
size=(300, 100))
panel = …Run Code Online (Sandbox Code Playgroud) 可能重复:
Python'self'关键字
请原谅我,如果这是一个令人难以置信的noobish问题,但我从来没有在Python中理解自我.它有什么作用?当我看到类似的东西时
def example(self, args):
return self.something
Run Code Online (Sandbox Code Playgroud)
他们在做什么?我想我也在某个功能中看到了args.请以简单的方式解释:P
在python的类函数中传递自引用值的原因是什么?例如:
class MyClass:
"""A simple example class"""
i = 12345
def f(**self**):
return 'hello world'
Run Code Online (Sandbox Code Playgroud)
通过这样做,你不是在做编译器的工作吗?
这只是为了我自己的启发.我正在学习python并且已经使用python进入OOP.我见过的类中每个方法的例子都有"self"作为第一个参数.所有方法都是如此吗?如果确实如此,那么python是否已被编写,以至于这个参数只是被理解,因此不需要?谢谢.
这是我的代码:
class bla:
def function1():
print 1
def function2():
bla.function1()
x = bla()
x.function2()
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我得到错误"TypeError:function2()不接受任何参数(1给定)"因为我似乎没有传递任何参数function2.
我是python的新手,对我来说,我经历过奇怪的行为.我有两个文件:foo.py和test.py
test.py:
from foo import Foo
f = Foo()
f.bar(1)
Run Code Online (Sandbox Code Playgroud)
当我的foo.py看起来像这样:
class Foo:
def bar(n):
print n
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
Traceback (most recent call last):
File "test.py", line 3, in <module>
f.bar(1)
TypeError: bar() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
当我的foo.py看起来像这样:
class Foo:
def bar(x,n):
print n
Run Code Online (Sandbox Code Playgroud)
我得到结果:
1
Run Code Online (Sandbox Code Playgroud)
这是为什么?为什么我需要声明两个参数,即使我想要只有一个方法?谢谢