python教程

当前位置:首页 > python面向对象 > 当前文章

python面向对象

python抽象类的定义和实现(abc模块)

2021-11-09 123赞 老董笔记

  父类约束子类的行为也可以通过抽象类来实现,抽象类顾名思义就是比较抽象,他不可以被实例化,在抽象类中可以定义抽象方法,子类必须实现父类的抽象方法!用抽象方法来防止子类漏掉某些方法或者规范开发者的开发习惯非常有用。

  1、抽象类定义

# -*- coding: utf-8 -*-
from abc import ABC, abstractmethod

class DataBase(ABC):
    @abstractmethod
    def my_connect(self):
        pass
    
    @abstractmethod
    def insert_data(self):
        pass

if __name__ == "__main__":
    p = DataBase()

Traceback (most recent call last):
  File "C:UsersAdministratorDesktop	est.py", line 53, in <module>
    p = DataBase()
TypeError: Can't instantiate abstract class DataBase with abstract methods insert_data, my_connect

  python自带的abc模块可以实现抽象类定义和操作。abc模块的ABC类可以实现一个抽象类。@abstractmethod装饰器可以让一个方法成为抽象方法。

  2、子类必须实现抽象方法

# -*- coding: utf-8 -*-
from abc import ABC, abstractmethod

class DataBase(ABC):
    @abstractmethod
    def my_connect(self):
        pass
    
    @abstractmethod
    def insert_data(self):
        pass


class Mysql(DataBase):
    def my_connect(self):
        print('func connect')

    def insert_data(self):
        print('func insert data')

if __name__ == "__main__":
    p = Mysql()
    p.insert_data()
func insert data

  如果子类不实现抽象方法,那么在实例化的时候会报错Can't instantiate abstract class Mysql with abstract methods insert_data,大家可以自行测试。如果抽象类某个方法没有被@abstractmethod装饰器装饰,那么他就不是抽象方法,子类也无需实现。

感兴趣直接点击图片获取>>

文章评论

python抽象类的定义和实现(abc模块)文章写得不错,值得赞赏