抽象类专门用于继承
定义
- python有一个专门的模块
ABC
来专门定义抽象类 - 一般继承的时候,强制让重写某个方法和属性,那么就需要抽象方法和抽象属性属性
from abc import ABC,abstractclassmethod
class Animal(ABC):
@abstractclassmethod
def say_name():
pass
- 在这里Animal就是抽象类
- 抽象类需要继承基类ABC
- 抽象类中不一定都是抽象方法,也可以是具体方法
- say_name就是抽象方法
- 需要使用
abstractclassmethod
进行修饰
- 需要使用
如果类中有抽象方法,那么这个类是不能实例化的
animal = Animal()
TypeError: Can’t instantiate abstract class Animal with abstract methods say_name
继承
- 继承抽象类就必须时间抽象类中的抽象方法
class Dog(Animal):
# 普通方法
def work():
print("i am work")
dog = Dog()
- 当前类没有实现抽象方法,实例化就报错
class Dog(Animal):
# 普通方法
def work():
print("i am work")
dog = Dog()
报错
TypeError: Can't instantiate abstract class Dog with abstract methods say_name
实现后则不会报错
class Dog(Animal):
# 普通方法
def work():
print("i am work")
def say_name():
print("i am WangCai")
dog = Dog()
当然我们还可以用类方法实现
class Dog(Animal):
# 普通方法
def work():
print("i am work")
@classmethod
def say_name():
print("i am WangCai")
dog = Dog()
只要实现了这个方法,那么就是可以的
抽象属性
除了抽象方法外,我们还可以有抽象属性,抽象属性也必须重写
from abc import ABC,abstractproperty
class Animal(ABC):
@abstractproperty
def ear():
return "animal ear"
子类
class Dog(Animal):
@property
def ear():
return "dog ear"
dog = Dog()