python中的基类是什么_Python中的抽象基类(abc)

如果一个类包含一个或多个抽象方法,则该类称为Abstract类。抽象方法是已声明但不包含任何实现的方法。抽象类可能无法实例化,其抽象方法必须由其子类实现。

当诸如hasattr()之类的其他技术笨拙或微妙的错误(例如,使用魔术方法)时,抽象基类提供了一种定义接口的方法。ABC引入了虚拟子类,这些子类不是从类继承的,但仍可以被isinstance()和issubclass()函数识别。Python中有许多内置的ABC。在collections.abc模块中定义了数据结构的ABC,例如迭代器,生成器,集合,映射等。数字模块定义数字塔,它是数字数据类型的基类的集合。Python库中的“ abc”模块提供了用于定义自定义抽象基类的基础结构。

'abc'通过将基类的方法标记为抽象来工作。这由@absttractmethod装饰器完成。然后,作为此类抽象基类的子类的具体类将通过覆盖其抽象方法来实现抽象基。

abc模块定义ABCMeta类,该类是用于定义抽象基类的元类。以下示例使用ABCMeta将Shape类定义为抽象基类。shape类具有由abstractmethod装饰的area()方法。

现在,一个Rectangle类将Shape类上面的作为其父类,并实现了abstract area()方法。由于它是一个具体的类,因此可以实例化它,并可以调用实现的area()方法。import abc

class Shape(metaclass=abc.ABCMeta):

@abc.abstractmethod

def area(self):

pass

class Rectangle(Shape):

def __init__(self, x,y):

self.l = x

self.b=y

def area(self):

return self.l*self.b

r = Rectangle(10,20)

print ('area: ',r.area())

请注意,抽象基类可能具有多个抽象方法。子类必须实现所有它们,否则将引发TypeError。

abc模块还定义了ABC帮助程序类,该类可用于代替抽象基类的ABCMeta类。class Shape(abc.ABC):

@abc.abstractmethod

def area(self):

pass

代替从抽象基类进行子类化,可以通过寄存器类装饰器将其注册为抽象基。class Shape(abc.ABC):

@abc.abstractmethod

def area(self):

pass

@Shape.register

class Rectangle():

def __init__(self, x,y):

self.l = x

self.b=y

def area(self):

return self.l*self.b

您还可以分别通过装饰器@abstractclassmethod和@abstractstatic方法装饰器在抽象基类中提供类方法和静态方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值