目录
一、先看一个问题
1、看一段代码
python
class Animal:
def __init__(self,name,age):
self.name=name
self.age=age
def cry(self):
# 动物都有叫唤行为,但是这个行为不明确(即不能明确的实现)
print("不知道是什么动物,不知道是什么叫声...")
2、需求分析
1)当父类的某些方法,需要声明,但是又不明确,如何实现时,怎么办?
2)不需要实例化父类对象,父类主要的是用于设计和制定规范,让其它类来继承并实现,怎么办?
3)解决方案->抽象类
二、抽象类的介绍
1、默认情况下,Python不提供抽象类,Python附带一个模块,该模块为定义抽象基类提供了基础,该模块名称为abc
2、当我们需要抽象基类时,让类继承ABC(abc模块的ABC类),使用@abstractmethod声明抽象方法(@abstractmethod用于声明抽象方法的装饰器,在abc模块中),那么这个类就是抽象类
3、抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类的抽象方法
三、快速入门
1)文档:abc --- 抽象基类 --- Python 3.12.5 文档
2)当父类的一些方法不能确定时,可以使用@abstractmethod声明,同时继承ABC类,那么这个类就是抽象类
我们看看如何把Animal做成抽象类,并让子类Tiger实现
python
from abc import ABC, abstractmethod
# Animal就是抽象类
class Animal(ABC):
def __init__(self, name, age):
self.name = name
self.age = age
# cry是一个抽象方法
@abstractmethod
def cry(self):
pass
# 注意:抽象类(含有抽象方法),不能实例化
# TypeError: Can't instantiate abstract class Animal
# animal=Animal("动物",3)
# 编写子类Tiger继承Animal并实现抽象方法
class Tiger(Animal):
def cry(self):
print(f"老虎 {self.name} 嗷嗷叫...")
tiger=Tiger("皮皮",2)
tiger.cry()
四、注意事项和使用细节
1、抽象类不能被实例化
2、抽象类需要继承ABC,并且需要至少一个抽象方法
3、抽象类中可以有普通方法
4、如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,否则它仍然是一个抽象类