Python继承与多继承
来源:互联网 发布:4000三个月淘宝代运营 编辑:程序博客网 时间:2024/05/29 04:51
1.继承
在C++和Java中,使用继承时,子类的构造函数会自动调用父类的构造函数,但在Python中,子类必须显式的在__init__()函数中再次调用父类中的__init__()函数。如下例:
class Employee(object): def __init__(self, name, salary = 0): self.name = name self.salary = salary def raisesalary(self, percent): self.salary = self.salary * (1 + percent) def work(self): print self.name, "writes computer code"
<pre name="code" class="python" style="font-size: 14px;">class Designer(Employee): def __init__(self, name): Employee.__init__(self, name, 5000) def work(self): print self.name, "writes design document"<span style="font-family: Arial, Helvetica, sans-serif;"> </span>子类Designer也可以使用super来进行初始化。
class Designer(Employee): def __init__(self, name): super(Designer, self).__init__(name, 5000) def work(self): print self.name, "writes design document"
2.多继承
在C++中,使用虚继承来实现多继承,以避免子类在继承时多次调用基类的构造函数,而在Java中,则取消了多继承,使用接口来达到多继承的效果。在Python中的解决方案是MRO即Method Resolution Order,方法解析顺序。主要是通过super方法实现的。但如果用super方法来解决多继承问题,由于各个父类中的__init__()函数中参数的数量可能不同,那应该怎么初始化呢?如下例。class A(object): def __init__(self, a): print aclass B(object): def __init__(self, a, b): print a+bclass C(A, B): def __init__(self): super(C,self).__init__(?)c = C()则?处应该填几个参数?
答案是1个参数,因为按照继承的顺序,A类中的构造需要1个参数初始化即可。即super函数与父类的继承顺序有关,且初始化父类继承顺序中,最先有__init__()方法的那个。
super方法的使用仍在继续探索中。。。
super方法的使用仍在继续探索中。。。
0 0
- Python继承与多继承
- Python - 单继承与多继承
- python多继承与mro
- Python类与继承
- Python学习09:继承与多重继承
- 多继承与虚继承
- 多继承与虚拟继承
- 多继承与多重继承
- 多继承与虚继承
- 多继承与菱形继承
- python的多重继承与多态
- python类的继承与多态
- python 的继承与多态
- Python中多继承与super()用法
- python中的MRO与多继承
- python中封装、继承与多态
- python中的MRO与多继承
- Python基础-继承与多态
- 浏览器兼容position 定位层级关系
- APP端webview自动播放视频
- [iOS]APP代码实践:建立一个辅助的APP类,减少对AppDelegate的修改
- maven项目使用外部tomcat7并进行远程热部署
- 正确地设置安卓通知栏图标尺寸
- Python继承与多继承
- 语音质量评价
- CentOS学习笔记之<虚拟机能ping通同一网关的其他机器,ping不通主机>
- pt-query-digest查询日志分析工具
- 如何在Spring容器中加载自定义的配置文件
- intent启动activity和activity的task启动模式的关系与区别
- 第一次!
- android IPC通信(下)-AIDL
- 《挑战程序设计竞赛》2.2.1 贪心法-区间 POJ2376 POJ1328 POJ3190