龙空技术网

Python基础编程——抽象基类

Python编程爱好者 17

前言:

此刻小伙伴们对“python调用基类构造函数”大约比较注重,看官们都想要学习一些“python调用基类构造函数”的相关资讯。那么小编也在网上汇集了一些关于“python调用基类构造函数””的相关文章,希望同学们能喜欢,兄弟们快快来了解一下吧!

在上一节中介绍了作用域和类的命名空间,本节将介绍抽象基类以及抽象类相关的概念,抽象类与Java中的抽象类相同,需要在子类中实现抽象类的方法,不同的是Java中是使用implements关键字来编写,但是在Python中仍然使用的是继承的方式编写。

接口

在介绍抽象基类之前需要简单了解一下接口。接口与多态有关,在处理多态对象时,我们只关心其接口(协议)—对外暴露出来的对象方法和属性。在Python中我们假设对象能够完成要求他完成的任务,如果不能完成,则程序失败。

通常我们会要求对象遵循特定的接口(即实现特定的方法),但是如果需要,也可以非常灵活地提出要求:不是直接调用方法并期待一切顺利,而是先检查所有的方法是否存在。在Python中提供了专门用于检测的内置函数hasattr()和callable()。

函数hasattr()用于检测我们所需要的方法(接口)是否存在,而函数callable()则用于检测方法是否可被调用。

如果我们要查看对象中存储的所有值,可通过检查其__dict__属性来实现。可参考我们在前面特殊方法章节中介绍的__dcit__()特殊方法。

抽象基类

通过手工来检测各个方法会比较繁琐,在Python中,通过引入abc模块来解决这个问题,abc模块为所谓的抽象基类提供支持。通常,抽象类是不能(至少是不应该)被实例化的,其职责是定义子类应该实现的一组抽象方法。具体如下程序abstract_base_class.py程序所示:

abstarct_base_class.py#!/usr/bin/env python# -*- coding: utf-8 -*-from abc import ABCfrom abc import abstractmethodclass Person(ABC):    @abstractmethod    def say(self):        passclass Student(Person):    def say(self):        print('你好,Python编程爱好者!')student = Student()student.say()程序执行结果如下所示:你好,Python编程爱好者!

在上面的程序中@abstartct表示抽象方法的意思,定义了抽象方法表示该类为一个抽象类,不可用于实例化,在使用时我们需要在子类中实现抽象方法,如果用抽象类来实例化对象,解释器会报类型错误。这类似于Java中的接口,只定义方法,不实现方法。上面是抽象基类的主要用途。有了抽象基类我们就可以使用函数isinstance()来进行检测,具体如下isinstance.py程序所示:

isinstance.py#!/usr/bin/env python# -*- coding: utf-8 -*-from abc import ABCfrom abc import abstractmethodclass Person(ABC):    @abstractmethod    def say(self):        passclass Student(Person):    def say(self):        print('你好,Python编程爱好者!')student = Student()student.say()# 使用isinstance()进行检测print(isinstance(student, Student))print(isinstance(student, Person))程序执行结果如下所示:你好,Python编程爱好者!TrueTrue

在开发中抽象类也具有广泛的应用,我们需要了解其基本的原理,即:抽象类不能直接用于实例化对象,抽象类中定义的方法都为抽象方法,在子类中需要实现抽象类的抽象方法,然后用子类进行实例化,可以用内置函数isinstance()来检测对象。

在这里还涉及到一些注册的问题,实际开发时应该避免,具体可以参考Python的官方文档,这里不做介绍。

总结

本节主要介绍了抽象基类ABC以及抽象方法的定义。

下一节将介绍多重继承下类的方法的调用,敬请关注!

如果有需要文中小程序的可以私信我哟!

创作不容易,还请点个赞!喜欢的小伙伴请点关注、收藏!

欢迎大家转发、评论!

#Python基础##Python入门推荐##Python编程从入门到实践##Python入门#

标签: #python调用基类构造函数