Python面向对象程序设计之继承与多继承用法分析
作者:辰晓2046 时间:2021-11-16 12:43:52
本文实例讲述了Python面向对象程序设计之继承与多继承。分享给大家供大家参考,具体如下:
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"
class Designer(Employee):
def __init__(self, name):
Employee.__init__(self, name, 5000)
def work(self):
print self.name, "writes design document"
子类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 a
class B(object):
def __init__(self, a, b):
print a+b
class C(A, B):
def __init__(self):
super(C,self).__init__(?)
c = C()
则?处应该填几个参数?
答案是1个参数,因为按照继承的顺序,A类中的构造需要1个参数初始化即可。即super
函数与父类的继承顺序有关,且初始化父类继承顺序中,最先有__init__()
方法的那个。
super
方法的使用仍在继续探索中。。。
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/chenxiao_ji/article/details/50311597
标签:Python,面向对象,继承,多继承
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MySQL数据库优化经验详谈
2009-12-15 10:34:00
asp如何使用SMTP Service发送邮件?
2010-06-05 12:43:00
301转向代码合集
2008-03-20 10:12:00
python 中文乱码问题深入分析
2023-06-12 19:04:37
![](https://img.aspxhome.com/file/2023/0/59140_0s.jpg)
修改新云CMS底部版权信息字数限制
2008-07-31 18:00:00
![](https://img.aspxhome.com/file/UploadPic/20087/31/200873118219668s.gif)
100%全屏布局设计
2009-05-15 12:24:00
TensorFlow神经网络创建多层感知机MNIST数据集
2022-03-29 20:09:19
Python标准库defaultdict模块使用示例
2022-03-02 04:35:05
Python基础之dict和set的使用详解
2022-01-16 04:15:08
![](https://img.aspxhome.com/file/2023/8/65068_0s.png)
Python 抓取动态网页内容方案详解
2022-05-19 02:09:29
![](https://img.aspxhome.com/file/2023/7/115827_0s.png)
PHP封装的PDO数据库操作类实例
2023-11-18 04:54:31
Python中常用的字典键和值排的方法
2022-12-22 15:51:05
![](https://img.aspxhome.com/file/2023/6/99036_0s.png)
Django restframework 框架认证、权限、限流用法示例
2023-01-17 15:51:20
如何用Frontpage下载别人的网站模板
2008-03-03 12:58:00
![](https://img.aspxhome.com/file/uploadpic/20083/3/200833125925418.gif)
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2023-10-14 02:31:42
Linux PHP连接MSSQL
2011-06-02 12:01:00
python使用jieba实现中文分词去停用词方法示例
2021-02-04 11:27:17
Pytorch数据读取与预处理该如何实现
2021-12-23 17:44:35
![](https://img.aspxhome.com/file/2023/0/100950_0s.png)
浅谈python内置函数callable的用法
2023-01-28 11:12:42
![](https://img.aspxhome.com/file/2023/1/113161_0s.png)
Python使用googletrans报错的解决方法
2021-09-21 01:38:00
![](https://img.aspxhome.com/file/2023/6/117896_0s.png)