python多继承(钻石继承)问题和解决方法简单示例
本文实例讲述了python多继承(钻石继承)问题和解决方法。分享给大家供大家参考,具体如下:
在菱形多继承中,如果用父类.__init__()
来调用父类的初始化方法,最上层会执行两次,所以遇到这种情况,python中用super.__init__()
来解决这个问题。
# -*- coding:utf-8 -*- #! python3 class Grand_father(object): def __init__(self): print('爷爷') class Father_left(Grand_father): def __init__(self): super(Father_left,self).__init__() # Grand_father.__init__(self) print('左边爸爸') class Father_right(Grand_father): def __init__(self): super(Father_right, self).__init__() # Grand_father.__init__(self) print('右边爸爸') class Me(Father_right,Father_left): def __init__(self): super(Me, self).__init__() # Father_left.__init__(self) # Father_right.__init__(self) print('我') def main(): me = Me() if __name__ == '__main__': main()
运行结果:
爷爷
左边爸爸
右边爸爸
我
如果需要调用左边爸爸,那就执行super(右边爸爸类).
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
相关推荐
-
python中子类继承父类的__init__方法实例
前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行.这个方法可以用来对你的对象做一些你希望的 初始化 . 注意:这个名称的开始和结尾都是双下划线. 父类A class A(object): def __init__(self, name): self.name=name print "name:", self.name def getName(self): return 'A ' + sel
-
python继承和抽象类的实现方法
本文实例讲述了python继承和抽象类的实现方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: #!/usr/local/bin/python # Fig 9.9: fig09_09.py # Creating a class hierarchy with an abstract base class. class Employee: """Abstract base class Employee""" d
-
Python面向对象程序设计之继承与多继承用法分析
本文实例讲述了Python面向对象程序设计之继承与多继承.分享给大家供大家参考,具体如下: 1. 继承 在C++和Java中,使用继承时,子类的构造函数会自动调用父类的构造函数,但在Python中,子类必须显式的在__init__()函数中再次调用父类中的__init__()函数.如下例: class Employee(object): def __init__(self, name, salary = 0): self.name = name self.salary = salary def
-
Python类的多重继承问题深入分析
正文 首先得说明的是,Python的类分为经典类 和 新式类 经典类是python2.2之前的东西,但是在2.7还在兼容,但是在3之后的版本就只承认新式类了 新式类在python2.2之后的版本中都可以使用 经典类和新式类的区别在于: 经典类是默认没有派生自某个基类的,而新式类是默认派生自object这个基类的: 复制代码 代码如下: # old style class A():pass # new style class A(obejct):pass 2.经典类在类多重继承的时候是采用从左到右
-
Python面向对象程序设计多继承和多态用法示例
本文实例讲述了Python面向对象程序设计多继承和多态用法.分享给大家供大家参考,具体如下: 多继承 就是一个子类继承多个父类: 多继承的例子,如下: # -*- coding:utf-8 -*- #! python3 class Base(object): def test(self): print("------base") class A(Base): def test1(self): print("-----test1") class B(Base): de
-
Python多继承顺序实例分析
本文实例讲述了Python多继承顺序.分享给大家供大家参考,具体如下: 示例1: #-*- coding:utf-8 -*- #!python2 class A(object): def caller(self): print 'A caller' self.called() def called(self): print 'A called' class B(object): def called(self): print 'B called' class C(B,A): pass if __
-
Python多继承原理与用法示例
本文实例讲述了Python多继承原理与用法.分享给大家供大家参考,具体如下: python中使用多继承,会涉及到查找顺序(MRO).重复调用(钻石继承,也叫菱形继承问题)等 MRO MRO即method resolution order,用于判断子类调用的属性来自于哪个父类.在Python2.3之前,MRO是基于深度优先算法的,自2.3开始使用C3算法,定义类时需要继承object,这样的类称为新式类,否则为旧式类 从图中可以看出,旧式类查找属性时是深度优先搜索,新式类则是广度优先搜索 C3算法
-
用实例解释Python中的继承和多态的概念
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). 比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: class Animal(object): def run(self): print 'Animal is running...' 当我们需要编写Dog和Cat类时,就可以直接从Animal
-
在python里面运用多继承方法详解
如何在PYTHON里面运用多继承 class Father: def hobby(self): print("love to play video game.") class Mother: def cook(self): print("love to cook anything.") #比如说有两个类,如果想要一个子类同时继承这两个类,应该怎么操作呢. class Father: def hobby(self): print("love to play
-
基于python3 类的属性、方法、封装、继承实例讲解
Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. python类与c++类相似,提供了类的封装,继承.多继承,构造函数.析构函数. 在python3中,所有类最顶层父类都是object类,与java类似,如果定义类的时候没有写出父类,则object类就是其直接父类. 类定义 类定义语法格式如下: class ClassName: <statement
-
Python中的单继承与多继承实例分析
本文实例讲述了Python中的单继承与多继承.分享给大家供大家参考,具体如下: 单继承 一.介绍 Python 同样支持类的继承,如果一种语言不支持继承,类就没有什么意义.派生类的定义如下所示: class DerivedClassName(BaseClassName1): <statement-1> . . . <statement-N> 需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类
-
Python类定义和类继承详解
一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象 类的私有属性: __private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问 在类内部的方法中使用时 self.__private_attrs 类的方法 在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,
随机推荐
- ajax传递多个参数具体实现
- js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本
- BootStrap实现邮件列表的分页和模态框添加邮件的功能
- php集成环境xampp中apache无法启动问题解决方案
- thinkphp3.2实现上传图片的控制器方法
- Windows 8.1下MySQL5.7 忘记root 密码的解决方法
- Node.js的Mongodb使用实例
- 浅谈Ajax技术实现页面无刷新
- jquery实现类似淘宝星星评分功能有截图
- PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891
- 一键清除_desktop.ini文件的批处理文件
- SQL Server如何保证可空字段中非空值唯一
- Python中元组,列表,字典的区别
- jQuery中select与datalist制作下拉菜单时的区别浅析
- Javascript 按位左移运算符使用介绍(<<)
- JavaScript实现存储HTML字符串示例
- CentOS7下安装Nginx+MySQL教程
- 巧用Gmail(Google)传送文件
- php中删除、清空session的方式总结
- 路由器+WIC-1ADSL的配置静态和动态