python中的基类是什么_python抽象基类

(what)什么是抽象基类?

抽象基类它提供了接口,但是又没有去把接口实现的类,需要由子类完成。感觉它就是老板,只告诉你要完成项目A, 你接到项目A后(继承),你自己去把它完成。

抽象基类特点:

1.继承类必须实现抽象基类的方法

2.抽象基类无法实例化

(why)为什么要有抽象基类这玩意?

1.why 抽象基类?

譬如要开发一个项目,你要规定项目开发者要去完成某些接口,有些接口会不会忘记实现了呢?你在担心...这时候抽象基类就帮上忙了,你可以给开发者提供抽象基类,因为它必须让继承它的子类去实现它所要求的方法(这个例子不知道牵强不?)。当然也有其他的优点:处理继承问题方面更加规范、系统,明确调用之间的相互关系,使得继承层次更加清晰。

2. 为什么使用collections.abc

假设我们要编写一种对象,本身虽然不属于list子类,但是却要让它可以像list那样子去访问。例如我们现在想让一颗二叉树可以像list那样子访问,那么我们要实现__geitem__(),要实现__len__(),这个还不完整,还要实现index, count方法,要实现那么多方法很复杂,用collections.abc模块的话,实现了抽象基类所要求的方法,模块会自动实现剩下的那些方法。

(how)如何使用?

我们一般都不会自己去定义抽象基类,而是使用collections.abc模块

例如:

import abc

class A(abc.ABC):#自己定义一个抽象基类,

@abc.abstractmethod

def eat(self):

pass

class B(A):#继承抽象基类

def voice(self):

pass

if __name__ == "__main__":

a = A()

#报错,抽象类无法实现实例化

#TypeError: Can't instantiate abstract class A with abstract methods eat

a = B()

a.eat()

#报错,继承类必须实现抽象类的方法

#TypeError: Can't instantiate abstract class B with abstract methods eat

又如:

from collections import abc

class A(abc.Sequence): #继承抽象基类abc,Sequece

def eat(self):

pass

class B(A):

def __getitem__(self): #必须实现__getitem__()

pass

def __len__(self): #必须实现__len__()

pass

def voice(self):

pass

if __name__ == "__main__":

b = B()

如有不恰当之处,请指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值