您的位置: 网站首页> python面向对象> 当前文章

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

老董-我爱我家房产SEO2021-11-09151围观,121赞

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

  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编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

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

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200