所以,我不明白“自我”是如何定义的,但它总是被使用。
前:
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"My Frame",size=(300,200))
panel=wx.Panel(self)
self=self.CreateStatusBar()
menu=CreateMenuBar()
first=wx.Menu()
first.Append(NewId(),"Close window","Yup")
menu.Append(first,"File")
我不确定这是否正确,我仍在解决这些错误,这只是脚本的一部分,但是你怎么不定义self
?你可以去self.CreateStatusBar()
。 Python如何知道self
是什么?请用简单的话来解释。
谢谢! :)
答案 0 :(得分:2)
self
指的是实例变量。它是对当前对象的引用。它在其他语言中等同于“this”,但在Python中,“显式优于隐式”,因此它实际上被列为任何函数中的第一个参数(实质上是在那里定义)。
(注意:它实际上没有被称为self
。你可以将它命名为任何你想要的东西。但是,这是常见的惯例。)
答案 1 :(得分:2)
self
表示您正在调用该方法的对象。所以这段代码:
class Foo(object):
...
def bar(self, msg):
print msg
f = Foo()
f.bar("hello")
相当于:
f = Foo()
Foo.bar(f, "hello")
答案 2 :(得分:1)
self
是对象本身的引用。它类似于C ++或Java中的this
。这是一个调用约定,意味着你没有设置它,但是语言会把它弄清楚(就像你从未在其他语言中实际设置this
一样,但它总是在那里)。
o = SomeClass()
o.someMethod('hi')
上面的代码可以很容易地写成:
o = SomeClass()
SomeClass.someMethod(o, 'hi')
第一个参数(self)是对象本身。
答案 3 :(得分:1)
Self用于表示您指的是类的当前实例中的某些内容,即您正在处理的当前对象。您无需定义它,因为它会自动传递给实例方法。
如果您不熟悉对象,请查看此链接,以简单的术语解释此词汇。
http://www.tutorialspoint.com/python/python_classes_objects.htm
答案 4 :(得分:0)
尝试为类定义成员函数,但忘记包含self
:
>>> class Foo:
def func(param):
print param
>>> f = Foo() #make an object of type Foo
当您致电func
时,您会收到错误消息:
>>> f.func("Hello") # call a method on the Foo object
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
f.func("Hello")
TypeError: func() takes exactly 1 argument (2 given)
错误是说两个参数都传递给了函数,即使我们只传递了"Hello"
。 Python隐式将f
引用的对象传递给类func
定义的函数Foo
,作为第一个参数,按惯例我们将其命名为self
。
>>> class Foo:
def func(self, param):
print self, param
>>> f = Foo() #make an object of type Foo
>>> f.func("Hello") # call a method on the Foo object
<__main__.Foo instance at 0xb6b6ddcc> Hello
>>> f
<__main__.Foo instance at 0xb6b6ddcc>
这告诉我们self
是Foo
的一个实例,与f
的实例相同。