Python 之抽象方法 @abstractmethod 的理解

如果你熟悉 Java 的话,Java 里有一个抽象接口的概念,Python 里的抽象方法基本上与其类似。

在 Python 中,@abstractmethod 是一个装饰器,用于定义抽象方法。它是实现抽象基类(Abstract Base Class, ABC)的核心工具,通过 abc 模块提供。抽象方法要求子类必须实现该方法,否则子类无法被实例化(当然,如果子类本身只是作为中间类,不需要实例化的话,也是无需实现该方法的)。

抽象基类(ABC):包含至少一个抽象方法的类,不能直接实例化。

抽象方法:声明但不实现的方法(只有方法签名),子类必须重写

作用:强制子类实现特定方法,确保接口一致性(类似 Java 的接口)。

from abc import ABC, abstractmethod


# 抽象基类
class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass  # 无具体实现

    def sleep(self):  # 非抽象方法(可选实现)
        print("Zzz...")


# 子类必须实现抽象方法
class Dog(Animal):
    def make_sound(self):
        return "Woof!"


class Cat(Animal):
    def make_sound(self):
        return "Meow!"


# 正确用法
dog = Dog()
print(dog.make_sound())  # 输出: Woof!


# 错误示范:未实现抽象方法的子类
class Bird(Animal):
    pass  # 未重写 make_sound


# 尝试实例化会报错
try:
    bird = Bird()  # TypeError: Can't instantiate abstract class Bird with abstract method make_sound
except TypeError as e:
    print(e)  # 输出错误信息

animal = Animal()  # TypeError: Can't instantiate abstract class Animal with abstract method make_sound

一般常用于以下用途:

定义接口规范:强制子类实现特定 API。

框架设计:确保插件或扩展实现必要方法。

类型检查:结合 isinstance() 检查对象是否实现了接口。

特性说明
目的强制子类实现特定方法
使用场景定义接口、框架设计、多态约束
关键装饰器@abstractmethod
基类要求继承 ABC 或使用 metaclass=ABCMeta
实例化限制抽象基类和未实现全部抽象方法的子类不能被实例化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值