请回答'自我'

时间:2012-02-22 20:31:15

标签: python

所以,我不明白“自我”是如何定义的,但它总是被使用。

前:

 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是什么?请用简单的话来解释。

谢谢! :)

5 个答案:

答案 0 :(得分:2)

python中的

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>

这告诉我们selfFoo的一个实例,与f的实例相同。