Python3面向对象--2.继承(7)抽象基类

抽象基类(ABCs),:
目的:
事先定义这个类能满足的需求。
概念:
定义一组必须被类的鸭子类型实例实现的方法和属性
抽象基类部分或全部方法和属性不用实现
特点:
所以如果不实现抽象了的的方法属性,对象无法实例化。
所有为抽象属性方法提供具体实现的类都是抽象基类的子类
分类:
内置的,大多数存在于colletions模块

https://www.cnblogs.com/dianel/p/10787693.html

自定义的抽象基类

https://blog.csdn.net/qq_35371031/article/details/91385811
https://www.cnblogs.com/FG123/p/9463673.html

例:`内置

from collections import Container
Container.__abstractmethods__
#查看它的抽象方法
frozenset({'__contains__'})
#说明Container只是实现了__containes__一个抽象方法
help(Container.__contains__)
#用help方法查看函数的签名
Help on function __contains__ in module collections.abc:

__contains__(self, x)
#只需要一个参数,给用户检查它的值是否在这个容器中。

元组,字典,序列都实现了这个方法。

from collections import Container
class OddContainer:
    "判断一个数是否为偶数"
    def __contains__(self, x):
        if not isinstance(x.int) or not x%2:
            return False
        return True

odd=OddContainer()
print(isinstance(odd,Container))
#判断两个类型是否相同,并且考虑继承关系,认为子类是一种父类类型
print(issubclass(OddContainer,Container))
#判断参数 OddContainer 是否是类型参数 Container 的子类

True

True
鸭子类型的多态相比传统的多态,我们不用使用继承关系,就可以创建“是一个”关系。
如上一个例子,我们只是OddContainer类实现了一个抽象方法就创建了“是一个关系”
所有为抽象属性方法提供具体实现的类都是抽象基类的子类

所有为抽象属性方法提供具体实现的类都是抽象基类的子类
常见的面向对象语言通常在类的接口和实现之间有明确的区分,如JAVA的interface关键字,用于当以不需要事先的方法。在这这种环境中,抽象类提供了一个接口,以及众多方法钟某几个的具体实现,任何类可以明确声明实现自某国接口
python的ABC帮助提供了接口的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值