You need to enable JavaScript to run this app. Python中继承ABC的类是否为抽象类?为何可直接实例化无报错?
优惠活动
大模型
产品
解决方案
定价
更多

Python中继承ABC的类是否为抽象类?为何可直接实例化无报错?

现象原因

仅继承ABC类不足以让Python将其判定为不可实例化的抽象类,你的Example类中没有任何被@abstractmethod装饰的未实现抽象方法,因此可以正常实例化,不会触发报错。

Python抽象类判定规则

Python的抽象类判定需要同时满足两个条件:

  • 类的元类为ABCMeta(通常通过继承ABC类实现,ABC类的元类默认就是ABCMeta)
  • 类本身或其继承的父类中,存在至少一个未被实现的、被@abstractmethod装饰的抽象方法/属性

只有同时满足以上两个条件的类,才会被标记为不可实例化的抽象类,尝试实例化时会抛出TypeError。

如果子类继承了抽象父类,必须重写实现所有被@abstractmethod标记的抽象方法,才会成为可实例化的普通类;如果没有实现完全部抽象方法,子类依旧是不可实例化的抽象类。

验证示例

给你的Example类添加抽象方法后,就会触发实例化报错:

from abc import ABC, abstractmethod

class Example(ABC):
    def smile(self):
        print("smile")
    
    # 添加被@abstractmethod装饰的抽象方法
    @abstractmethod
    def cry(self):
        pass

# 执行以下代码会抛出 TypeError: Can't instantiate abstract class Example with abstract method cry
example = Example()

内容的提问来源于stack exchange,提问作者Kun.tito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 14:36:09