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