Python要self的理由

Python要self的理由

Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候没必要为这个参数赋值 (显胜于隐 的引起)。Python的类的方法的这个特别的参数指代的是对象自己,而按照Python的惯例,它用self来表示。(固然咱们也能够用其余任何名称来代替,只是规范和标准在那建议咱们一导致用self)python

为什么Python给self赋值而你没必要给self赋值?

例子说明:建立了一个类MyClass,实例化MyClass获得了MyObject这个对象,而后调用这个对象的方法MyObject.method(arg1,arg2) ,这个过程当中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)ide

这就是Python的self的原理了。即便你的类的方法不须要任何参数,但仍是得给这个方法定义一个self参数,虽然咱们在实例化调用的时候不用理会这个参数不用给它赋值。函数

实例:url

class Python:
def selfDemo(self):
print 'Python,why self?'
p = Python()
p.selfDemo()

输出:Python,why self?spa

把p.selfDemo()带个参数如:p.selfDemo(p),获得一样的输出结果code

若是把self去掉的话,orm


class Python:
def selfDemo():
print 'Python,why self?'
p = Python()
p.selfDemo()

这样就报错了:TypeError: selfDemo() takes no arguments (1 given)对象

扩展

self在Python里不是关键字。self表明当前对象的地址。self能避免非限定调用形成的全局变量。it

在Python3以后不知道将self隐了没?感受在Python类里的方法都要带个self这样有点死板io



首先明确的是self只有在类的方法中才会有,独立的函数或方法是没必要带有self的。self在定义类的方法时是必须有的,虽然在调用时没必要传入相应的参数。

self名称不是必须的,在python中self不是关键词,你能够定义成a或b或其它名字均可以,可是约定成俗,不要搞另类,你们会不明白的。下例中将self改成myname同样没有错误:


1 class Person:
2           def _init_(myname,name):
3                    myname.name=name
4           def sayhello(myname):
5                    print 'My name is:',myname.name
6 p=Person('Bill')
7 print p


self指的是类实例对象自己(注意:不是类自己)。


1 class Person:
2          def _init_(self,name):
3                   self.name=name
4          def sayhello(self):
5                   print 'My name is:',self.name
6 p=Person('Bill')
7 print p


在上述例子中,self指向Person的实例p。 为何不是指向类自己呢,以下例子:


1 class Person:
2          def _init_(self,name):
3                   self.name=name
4          def sayhello(self):
5                   print 'My name is:',self.name
6 p=Person('Bill')
7 p1 = Person('Apple')
8 print p
相关文章
相关标签/搜索