Python 的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发)。Python 的类的方法的这个特别的参数指代的是对象本身,而按照 Python 的惯例,它用 self 来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用 self)
例子说明:创建了一个类 MyClass,实例化 MyClass 得到了 MyObject 这个对象,然后调用这个对象的方法 MyObject.method(arg1,arg2) ,这个过程中,Python 会自动转为 Myclass.mehod(MyObject,arg1,arg2)
这就是 Python 的 self 的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个 self 参数,虽然我们在实例化调用的时候不用理会这个参数不用给它赋值。
实例:
输出:Python,why self
把 p.selfDemo() 带个参数如:p.selfDemo(p),得到同样的输出结果
如果把 self 去掉的话,
这样就报错了:TypeError: selfDemo() takes no arguments (1 given)
self 在 Python 里不是关键字。self 代表当前对象的地址。self 能避免非限定调用造成的全局变量。
在 Python3 之后不知道将 self 隐了没?感觉在 Python 类里的方法都要带个 self 这样有点死板
首先明确的是 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
来源: http://www.bubuko.com/infodetail-1967570.html