流程的Python 第十二章:继承的优缺点

前言:
从子类化内置类型引起的问题谈起:内置类型的原生方法使用C语言实现
,不会调用子类中覆盖的方法。

目录:

  1. 内容回顾
  2. 相关资料
  3. 阅读后感

正文:
一. 内容回顾
1.1 子类化内置类型很麻烦
内置类型的方法不会调用子类覆盖的方法。例如,dict的子类覆盖的_ getitem_()方法不会被内置类型的get()方法调用。

1.2 多重继承和方法解析顺序
示例代码:

# -*- coding:UTF-8 -*-


class A:
    def ping(self):
        print 'this is A'

class B(A):
    def pong(self):
        print 'this is B'

class C(A):
    def pong(self):
        print 'this is C'

class D(B, C):
    def ping(self):
        print('this is D')

    def ping_pong(self):
        self.ping()
        self.pong()
        C.pong(self)

if __name__ == '__main__':
    d = D()
    print('---------1---------')
    d.ping()
    print('---------2---------')
    d.pong()
    print('---------3---------')
    d.ping_pong()

输出结果:

"D:\python 2.7\python.exe" E:/Codes/FluencePython/Chapter_12/demo_2_two.py
---------1---------
this is D
---------2---------
this is B
---------3---------
this is D
this is B
this is C

Process finished with exit code 0

结果解析:
流程的Python 第十二章:继承的优缺点_第1张图片

1.3 多重继承的真实应用
在标准库中,GUI工具包Tkinter把多重继承用到了极致。

1.4 处理多重继承
使用多重继承容易得出令人费解和脆弱的设计,下面是避免把类图搅乱的一些建议:
1)把接口继承和实现继承区分开
2)使用抽象基类显式表示接口
3)通过混入通用代码
4)在名称中明确指明混入
5)抽象基类可以作为混入,反过来则不成立
6)不要子类化多个具体类
7)为用户提供聚合类
8)优先使用对象组合,而不是类继承

1.5 一个现代示例:Djangot通用视图中的混入

二. 相关资料
2.1 多重继承是编程语言中的概念,多重继承指的是一个类可以继承另外一个类,而另外一个类又可以继承别的类,比如A类继承B类,而B类又可以继承C类,这就是多重继承。

2.2 通过多重继承,一个子类就可以同时获得多个父类的所有功能。

三. 阅读后感
继承的优点:
复用,可以减少代码重复。

继承的缺点:
两个基类中的同名方法会产生二义性,容易不确定调用了哪个基类中的方法。

参考:
1. 流畅python学习笔记:第十二章:子类化内置类型

你可能感兴趣的:(Timen_Python)