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

 

posted on 2023-05-05 20:33  一先生94  阅读(147)  评论(0编辑  收藏  举报

导航