本文摘自php中文网,作者anonymity,侵删。
self代表类的实例,而非类。先看一个例子:
1 2 3 4 5 6 7 |
|
执行结果如下
1 2 |
|
从上面的例子中可以很明显的看出,self代表的是类的实例。而self.class则指向类。
self可以不写吗
在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。
把上面的t.prt()一行改写一下,运行后的实际结果完全相同。
实际上已经部分说明了self在定义时不可以省略
1 2 3 4 5 6 |
|
运行时提醒错误如下:prt在定义时没有参数,但是运行时强行传了一个参数。
由于上面解释过了t.prt()等同于Test.prt(t),所以程序提醒多传了一个参数t。
1 2 3 4 |
|
如果定义和调用时均不传类实例是可以的,就是类方法。
1 2 3 4 |
|
运行结果如下
1 |
|
在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例。
先看代码
1 2 3 4 5 6 7 8 9 10 11 12 |
|
运行结果如下
1 2 3 |
|
解释:
运行c.cprt()时应该没有理解问题,指的是Child类的实例。
但是在运行c.pprt()时,等同于Child.pprt(c),所以self指的依然是Child类的实例,由于self中没有定义pprt()方法,
所以沿着继承树往上找,发现在父类Parent中定义了pprt()方法,所以就会成功调用。
总结
self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定是用self
self总是指调用时的类的实例。
以上就是python中的self多余吗的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
更多相关阅读请进入《Python》频道 >>

Python编程 从入门到实践 第2版
python入门书籍,非常畅销,超高好评,python官方公认好书。