原始的初始化

子类直接调用超类 __init__ 方法初始化,当形成钻石继承的时候,超类会被多次初始化,可能会有意向不到的问题:

BaseClass

/        \

OneClass    TwoClass

\        /

TestClass

from pprint import pprint

class BaseClass(object):
def __init__(self, a):
# value = a
self.value = a class OneClass(BaseClass):
def __init__(self, a):
BaseClass.__init__(self, a)
# value + 2
self.value += 2 class TwoClass(BaseClass):
def __init__(self, a):
BaseClass.__init__(self, a)
# value * 2
self.value *= 2 class TestClass(TwoClass, OneClass):
def __init__(self, a):
TwoClass.__init__(self, a)
OneClass.__init__(self, a)
# value + 8
self.value += 8
print self.value pprint(TestClass.mro())
test = TestClass(3) #
# 初始化的过程是:BaseClass ——> TwoClass ——> BaseClass ——> OneClass ——> TestClass
# value 的变化: value = 3 ——> value = 6 ——> value = 3 ——> value = 5 ——> value = 13

新类初始化

使用 super 可以解决超类重复初始化的问题,保证超类只被初始化一次:

from pprint import pprint

class BaseClass(object):
def __init__(self, a):
# value = a
self.value = a class OneClass(BaseClass):
def __init__(self, a):
super(OneClass, self).__init__(a)
# value + 2
self.value += 2 class TwoClass(BaseClass):
def __init__(self, a):
super(TwoClass, self).__init__(a)
# value * 2
self.value *= 2 class TestClass(TwoClass, OneClass):
def __init__(self, a):
super(TestClass, self).__init__(a)
# value + 8
self.value += 8
print self.value pprint(TestClass.mro())
"""
以以下相反的顺序初始化子类
[<class 'TestClass'>,
<class 'TwoClass'>,
<class 'OneClass'>,
<class 'BaseClass'>,
<type 'object'>]
"""
test = TestClass(3) #
# 初始化的过程是:BaseClass ——> OneClass ——> TwoClass ——> TestClass
# value 的变化: value = 3 ——> value = 5 ——> value = 10 ——> value = 18

python 基础——多重继承的更多相关文章

  1. python基础——多重继承

    python基础——多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. 回忆一下Animal类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗: Bat ...

  2. python基础之面向对象高级编程

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...

  3. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  4. Python基础s14-day1

    2016年7月23日"Python基础s14-Day1" Python是什么? Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种面向对象.直译式 ...

  5. python基础——使用元类

    python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...

  6. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  7. Python基础教程【读书笔记】 - 2016/7/4

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第二波:第7章  更加抽象 [总览] 创建自己的对象,是Python的核心概念!Python被称为面向对象的语言.介绍如 ...

  8. Python基础教程 - Tdcqma

      1.1 普通字符串 1.21 错误与异常 1.41 XXXXXX 1.61 XXXXXX 1.81 XXXXXX 1.101 XXXXXX 1.2 转义字符串 1.22 装饰器         1 ...

  9. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

随机推荐

  1. iis配置好后,解决打开服务器要输入用户名和密码的问题

    [转]IIS网站访问需要输入用户名和密码 xp系统下安装IIS5,并设置好网站路径,但是访问网站时需要输入用户名和密码,这个问题极大可能是因为你网站放置在一个文件系统为NTFS的盘符上,而IIS默认的 ...

  2. Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十六)

    今天我们继续实验Bridge方式的网络配置. Bridge的逻辑原理图如下: 上图中的“br0”就充当了一个桥的作用,主机上的物理网口eth0等根据需要加入到这个桥里面,所有虚拟机要跟外界通信都通过这 ...

  3. sc7731 Android 5.1 LCD驱动简明笔记之三

    此篇笔记基于sc7731 - android 5.1,对lcd的gralloc库做一个简明笔记. 第一部分 调用gralloc.sc8830.so所谓的Gralloc模块,它就是一个模块,一个操作ke ...

  4. C++ Bit Fields

    http://msdn.microsoft.com/en-us/library/ewwyfdbe%28v=vs.71%29.aspx Note An unnamed bit field of widt ...

  5. 如何在DigitalOcean安装Ghost

    查看原文: http://leancodingnow.com/how-to-install-ghost-on-digital-ocean-vps/ 这篇文章主要讲一下如何在DigitalOcean V ...

  6. PostgreSQL的AnynonArray的例子

    程序: CREATE OR REPLACE FUNCTION kappend(anynonarray, anyelement) RETURNS text AS $$ ; $$ LANGUAGE SQL ...

  7. JDBC概述以及几种驱动程序

    JDBC(Java DataBase Connectivity,数据库连接)是用来执行SQL的Java API.开发人员可以使用这些标准API来连接和操作数据库 JDBC是Java的规范,考虑到规范的 ...

  8. windows无法搜索新更新 80072ee2

      http://windows.microsoft.com/zh-cn/windows/windows-update-error-80072ee2#1TC=windows-7    

  9. FluorineFx对于现有站点的配置

    step 1:新建一个FluorineFX网站,作为参考 step 2:在现有网站添加FluorineFX网站的相关dll引用,并拷贝console.aspx和gateway.aspx至网站根目录(最 ...

  10. android安卓最新快捷环境搭建(转)

    现在很多视频和文章上的安卓环境搭建还是比较老的,挺麻烦.现在写快速方便的搭建: 一.下载JDK: 网址:http://www.oracle.com/technetwork/java/javase/do ...