Core Python:Python中继承特性的简述

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制。继承完全可以理解成类之间的 类型和子类型 关系,比如说鸟可以看成是麻雀的父类,鸟可以飞,因为麻雀是鸟的子类,自然就继承了鸟会飞的特性也可以飞。

面向对象的语言有Java,C++等,但是他们有些都是单继承,即一个子类只能有一个明确的父类(接口定义除外),如果不考虑间接继承的话,用java的角度来看待“动物,鸟,麻雀”三者关系,那么只能说麻雀要不是鸟,要不是动物,因为麻雀只能直接继承自鸟,或者是麻雀。Python支持直接多继承,即麻雀可以继承鸟的同时也继承动物


举个有点意义的例子来说面以上特性

父类1:Filter:一个有顾虑功能的超类,block【】中定义的内容在输出的时候将会被过滤掉

父类2:PrintClassInfo:一个可以打印类信息的基类

子类:SAMFilter:继承自父类1和2,可以同时调用他们的方法

__author__ = 'Administrator'

#定义一个有顾虑功能的超类,block【】中定义的内容在输出的时候将会被过滤掉
class Filter:
    def __init__(self):
        self.block = []

    def filter(self, seq):
        return [x for x in seq if x not in self.block]

#定义一个可以打印类信息的基类
class PrintClassInfo:
    def print_class_info(self):
        print(self.__class__)


#SAMFilter继承自Filter类,可以重用父类的filter方法
#列表中包含'SAM'元素将被过滤掉
class SAMFilter(Filter, PrintClassInfo):
    def __init__(self):
        self.block = ['SAM']


if __name__ == "__main__":
    seq = ['SAM', 'EVENT', 'WARNING', 'SAM']
    baseFilter = Filter()
    samFilter = SAMFilter()
    print(baseFilter.filter(seq))
    print(samFilter.filter(seq))

    #检查父子关系:检查Filter是否是SAMFilter的父类
    print(issubclass(SAMFilter, Filter))
    #查出已知類的父類
    print(SAMFilter.__bases__)
    #检测一个对象是否是一个类的实例
    print(isinstance(samFilter, SAMFilter))
    print(isinstance(samFilter, Filter))
    #显示已有对象的类型
    print(samFilter.__class__)
    #多重继承,使用PrintSupperClass类中的方法
    samFilter.print_class_info()

以上代码输出如下:

['SAM', 'EVENT', 'WARNING', 'SAM']
['EVENT', 'WARNING']
True
(<class '__main__.Filter'>, <class '__main__.PrintClassInfo'>)
True
True
<class '__main__.SAMFilter'>
<class '__main__.SAMFilter'>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值