Python中的抽象类解说
1、什么是抽象类?
如果说,类是对一堆对象共同内容的抽取,那么抽象类就是对一堆类共同内容的抽取,包括:属性和方法。
2、抽象类的特点
(1)抽象类必须包含一个或多个抽象方法,也可以包含普通方法。
(2)抽象类的抽象方法,在抽象类中并不作实现。
(3)抽象类不能被实例
(4)抽象类的子类要想进行实例化,必须先实现抽象父类中的所有抽象方法!!!!!!!!!!!!!
3、普通父类的示例
# coding:utf-8 # 不是抽象类,是一个普通父类 class Parent(object): # 构造方法 def __init__(self, sex, surname, job): self.sex = sex self.surname = surname self.job = job # 已经实现的普通方法 def run(self): print("running...") def say(self): print("saying...") def is_adult(self): print("True") # 未实现的普通方法 def hobby(self): pass # 子类 class Son(Parent): # 重写 def is_adult(self): print("False") # 实例化 s = Son(sex="male", surname="Zhang", job="student") s.is_adult() # False
s.hobby()
因此,parent是普通类,而不是抽象类,也没有继承顶级抽象父类ABC,所以parent类就是一个普通父类。parent类中有没有实现的方法,而son类继承它后也没有对其实现,但没关系,可以实例化!!!
4、抽象父类的示例
#coding:utf-8 # 从abc库中导入ABC, abstractmethod模块 from abc import ABC, abstractmethod # 抽象父类 class Parent(ABC): # 构造方法 def __init__(self, sex, surname, job): self.sex = sex self.surname = surname self.job = job # 已经实现的普通方法 def run(self): print("running...") def say(self): print("saying...") def is_adult(self): print("True") # 抽象方法 @abstractmethod def hobby(self): pass # 子类 class Son(Parent): # 重写 def is_adult(self): print("False") # 实例化 s = Son(sex="male", surname="Zhang", job="student") s.is_adult() s.hobby()
报错是因为,子类son类中继承了抽象父辈parent,但父类中有一个抽象方法,而son类没有实现,那么实例化的时候就会报错!!!
5、正确打开方式!!!
#coding:utf-8 # 从abc库中导入ABC, abstractmethod模块 from abc import ABC, abstractmethod # 抽象父类 class Parent(ABC): # 构造方法 def __init__(self, sex, surname, job): self.sex = sex self.surname = surname self.job = job # 已经实现的普通方法 def run(self): print("running...") def say(self): print("saying...") def is_adult(self): print("True") # 抽象方法 @abstractmethod def hobby(self): pass # 子类 class Son(Parent): # 重写 def is_adult(self): print("False") # 实现抽象父类的抽象方法 def hobby(self): print("basketball") # 实例化 s = Son(sex="male", surname="Zhang", job="student") s.is_adult() # False s.hobby() # basketball
参考:https://blog.csdn.net/Elon15/article/details/127176217