对super函数的简单理解
来源:互联网 发布:多约束遗传算法matlab 编辑:程序博客网 时间:2024/05/29 16:47
在看Magnus Lie Hetland的《Python基础教程》,虽然进度很慢但终究还是有些收获。在第9章讲构造方法的时候,介绍到super函数能够使子类调用超类的构造方法,以获得其基本的初始化。
举个例子:
class Bird: def __init__(self): self.hungry = True def eat(self): if self.hungry: print 'Aaaah...' self.hungry = False else: print 'No, thanks!'class SongBird(Bird): def __init__(self): self.sound = 'Squawk!' def sing(self): print self.sound
定义了一个类Bird,初始化的饥饿参数是True。再定义其子类SongBird,它多了一个功能是唱歌,初始化其声音参数是’Squawk!’。虽然SongBird继承了Bird的eat方法,但是没有hungry的特性,这是因为SongBird的构造方法被重写了,没有初始化饥饿参数。
使用super函数可以很好的解决这个问题,但前提是要使用新式类。运行如下代码,可以得到正确结果。
__metaclass__ = type# Bird should succed from objectclass Bird: def __init__(self): self.hungry = True def eat(self): if self.hungry: print 'Aaaah...' self.hungry = False else: print 'No, thanks!'class SongBird(Bird): def __init__(self): super(SongBird, self).__init__() self.sound = 'Squawk!' def sing(self): print self.soundsb = SongBird()sb.sing()sb.eat()sb.eat()
运行结果:
Squawk!
Aaaah…
No, thanks!
SongBird既能唱歌又能吃东西,能够完成超类的初始化构造方法。
在使用新式类的时候也可以不加第一行代码,__metaclass__ = type
,而直接让Bird继承object类,既类的定义为class Bird(object):
在运行这段代码的时候也出现了一个小的插曲,本想写这篇博客来说书上给的代码运行有问题,继承object才行。一写代码发现,原来__metaclass__ = type
的下划线是两道,我在编辑器中两道连在一起没有看出来也是醉了。
super函数还是很有用的哦!
阅读全文
0 0
- 对super函数的简单理解
- 对connect函数的简单理解
- java基础知识--对super()的理解
- 对 self = [super init] 的理解
- Python-理解super函数
- 对java super 学习理解
- 谈谈我对super和this的理解
- 本人对this super static 关键字的理解
- Super和This 简单理解
- 有关super,this,以及含有参数的简单理解
- 关于java中super与this的简单理解
- 关于java this和super的简单理解
- 对函数式编程简单理解
- 对RMI的简单理解
- 对MVC的简单理解
- 对JAVA简单的理解
- 对buffer的简单理解
- 对委托的简单理解
- 约束布局ConstraintLayout的使用(一)
- 欢迎使用CSDN-markdown编辑器
- MySQL 第六天
- linux上安装使用RabbitMQ
- VBA自定义数据类型(结构体使用)
- 对super函数的简单理解
- Tyvj1009
- 3D迷宫及路径效果展示图
- Windows下bat脚本自动发邮件
- JDBC PreparedStatement 防止sql注入原理
- Git 最佳实践:分支管理
- json详解
- QWT编译、配置、使用
- 关于xlsx转成json的工具(记录后续使用)