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,面向对象,继承,多继承
0
投稿
猜你喜欢
详解使用Python写一个向数据库填充数据的小工具(推荐)
2024-01-13 19:06:41
mysql实现sequence功能的代码
2024-01-27 14:30:20
Python select及selectors模块概念用法详解
2022-11-30 20:06:24
详解vue-router和vue-cli以及组件之间的传值
2024-05-21 10:31:10
python中的函数嵌套和嵌套调用
2021-09-05 01:10:26
Bootstrap框架的学习教程详解(二)
2024-06-05 09:28:56
PHP延迟静态绑定示例分享
2024-06-05 15:42:24
Quester解读17条广告效果测定
2007-11-27 12:51:00
Go语言命令行操作命令详细介绍
2023-07-22 16:15:40
Python使用openpyxl模块处理Excel文件
2021-10-03 06:45:10
Go读取文件与写入文件的三种方法操作指南
2024-02-01 05:29:46
sql时间格式化输出、Convert函数应用示例
2024-01-22 01:23:53
windows下安装、卸载mysql服务的方法(mysql 5.6 zip解压版安装教程)
2024-01-13 04:56:20
python config文件的读写操作示例
2022-04-05 07:42:11
python操作日期和时间的方法
2021-08-29 18:32:59
成功实现ajax,xmlhttp跨域访问(php,asp,jsp)
2008-02-13 18:40:00
mysql远程跨库联合查询的示例
2024-01-13 23:09:10
jQuery技巧
2009-09-27 12:28:00
简单总结Python中序列与字典的相同和不同之处
2022-02-08 06:31:52
Django自定义YamlField实现过程解析
2021-01-14 16:43:20