探秘Python抽象类

在那篇探讨Python接口与“鸭类型”关系的文章中(Python中接口与鸭类型),我们详细介绍了Python中接口的实现方式--鸭类型。尽管“鸭类型”仅作为接口的一种实现策略,并不具备像Java等其他语言中的强制实现检查功能,且甚至需要借助hasattr函数来检验所需的方法是否存在,为此Python引入了abc模块以解决此类难题。该模块为构建抽象基类提供了有力支持。

抽象类主要用于制定规范,而非实际对象创建。它用于设定实现类(或子类)所需拥有的属性或方法,而自身并无实现责任。

抽象类详解

Python 中使用 abc 模块来实现抽象类的功能,其中模块中 ABC 作为抽象基类,抽象类需要继承该类。

abc.abstractmethod 用来定义抽象方法,表示子类必须要实现的方法。

使用propertyabc.abstractmethod 两个装饰器来定义抽象属性, 表示子类必须要实现定义的属性。

我们使用代码来解释:

from abc import ABC, abstractmethod

# ---------------------------------抽象类
# 定义抽象基类User
# 继承ABC
class User(ABC):

    # 定义属性
    @property
    @abstractmethod
    def age(self): pass

    # 定义初始化函数
    def __init__(self, name):
        self._name = name

    # 定义抽象方法
    @abstractmethod
    def print_name(self): pass

# --------------------------------实现类
# 定义继承抽象类的Manager
class Manager(User):

    # 必须设置属性
    @property
    def age(self):
        return 20

    # 定义初始化函数
    def __init__(self, name):
        super().__init__(name)

    # 必须实现的方法
    def print_name(self):
        print(f"我的名字叫: {self._name}")

# 实例化Manager
m = Manager("小明")
# 调用方法
m.print_name()

# 我的名字叫: 小明

在上述代码中, 我们定义了User 抽象类(继承自 ABC),并且定义了age 抽象属性和print_name 抽象方法,Manager 作为其实现类,分别实现了 age 属性和print_name 两个方法。

注意点

  1. 如果使用 pycharm 开发, 当一个类继承了一个抽象类,则会提示需要实现的方法, 只需要点击蓝色字,就可直接生成代码,非常方便(示例)。
  1. 继承了抽象类的子类, 如果没有或没有完全实现所有的方法,则继承的类依然是抽象类,且不能实例化

#文章首发挑战赛#

#挑战30天在头条写日记#

相关文章

python面向对象四大支柱——抽象(Abstraction)详解

抽象是面向对象编程的四大支柱之一,它强调隐藏复杂的实现细节,只暴露必要的接口给使用者。下面我将全面深入地讲解Python中的抽象概念及其实现方式。一、抽象的基本概念1. 什么是抽象?抽象是一种"...

[python] python抽象基类使用总结

在Python中,抽象基类是一类特殊的类,它不能被实例化,主要用于作为基类被其他子类继承。抽象基类的核心作用是为一组相关的子类提供统一的蓝图或接口规范,明确规定子类必须实现的方法,从而增强代码的规范性...

Python面向对象编程(OOP)实践教程

一、OOP理论基础1. 面向对象编程概述面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用"对象"来设计应用程序和软件。OOP的核心...

抽象基类ABC,名字取的傻白甜,其实是Python进阶必会知识点

作者:麦叔来源:麦叔编程ABC是什么我们来聊一个Python进阶话题,抽象基类,英文是Abstract Base Class,简称为ABC。这个名字看起来很简单,ABC,但其实是Python进阶的重要...

编程开发中的抽象概念

在编程开发中,抽象概念是核心思想之一,它通过隐藏复杂细节、提炼共性模式来简化设计和实现。以下是编程中常见的抽象概念分类及示例:1. 数据抽象(Data Abstraction)核心思想:将数据的具体表...