Python 请回答关于';自我';

Python 请回答关于';自我';,python,Python,所以,我不明白“自我”怎么从来没有定义过,但它总是被使用 例: 我不确定这是否正确,我仍在解决bug,这只是脚本的一部分,但为什么不定义self?您只需转到self.CreateStatusBar()。Python如何知道什么是self?请用简单的话解释 谢谢!:) self是对对象本身的引用。这就像C++中的代码< > java。这是一个调用约定,意味着您不设置它,但语言会解决它(就像您从未在其他语言中实际设置这个,但不知何故它总是存在) 上面的代码可以简单地编写为: o = SomeCla

所以,我不明白“自我”怎么从来没有定义过,但它总是被使用

例:

我不确定这是否正确,我仍在解决bug,这只是脚本的一部分,但为什么不定义
self
?您只需转到self.CreateStatusBar()。Python如何知道什么是
self
?请用简单的话解释


谢谢!:)

self
是对对象本身的引用。这就像C++中的代码< <代码> > java。这是一个调用约定,意味着您不设置它,但语言会解决它(就像您从未在其他语言中实际设置
这个
,但不知何故它总是存在)

上面的代码可以简单地编写为:

o = SomeClass()
SomeClass.someMethod(o, 'hi')

第一个参数(self)是对象本身。

python中的self
是指实例变量。它是对当前对象的引用。它在其他语言中等同于“this”,但在Python中,“显式优于隐式”,因此它实际上被列为任何函数的第一个参数(本质上是在这里定义的)


(注意:它实际上不必被称为
self
。您可以随意命名它。不过,这是常见的惯例。)

self
表示您正在调用该方法的对象。所以这个代码:

class Foo(object):
    ...
    def bar(self, msg):
        print msg

f = Foo()
f.bar("hello")
相当于:

f = Foo()
Foo.bar(f, "hello")

Self用于表示您正在引用类的当前实例中的某个对象,即您正在处理的当前对象。您不需要定义它,因为它会自动传递给实例方法

如果您不熟悉对象,请查看此链接,该链接用简单的术语解释此词汇


尝试为类定义成员函数,但忘记包含
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)

这告诉我们,
self
Foo
的一个实例,与Python中的
f

相同,没有定义任何内容。我不知道你在问什么
self=self.CreateStatusBar()
也不太可能正确。你在哪里看到这段代码的?有趣的是,self根本不是一个特殊的关键字。你可以用任何词来代替它。但是请不要。如果您使用除self以外的任何语言,您的代码将很难被其他人阅读。请允许我补充一点,与其他语言不同,它被定义为anmethod的第一个参数,它只是由Python自动填充。在另一种OO语言中,magic单词“this”的工作原理与Python的“self”相同,但它确实没有在任何地方定义。噢!所以说“self.blah”你说的是“这个当前的物体”?@fireframe09225-对。或者更准确地说,你说的是“这个当前对象的废话”:)好吧,但什么是自我?在我的脚本中,self代表什么?@Fireflame-当前的objectSelf实际上不是一个关键字
>>> class Foo:
        def func(param):
            print param

>>> f = Foo() #make an object of type Foo
>>> 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)
>>> 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>