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
  • asp之家 网络编程 m.aspxhome.com