python的抽象类和抽象方法

抽象类是一种不能直接被继承的类。举个例子,我们可以从类Creature衍生出类People,Cats,其中前者两条腿走路,后者四条腿走路,而单独的类Creature却没有一个几条腿走路的方法,因为这是不确定的。

(关于装饰器,可查看https://blog.csdn.net/qq_45812220/article/details/137809943)

我们直接上代码:

dart 复制代码
import abc

class A(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def mine(self):

class B(A):
    def mine(self):
        print("123")

b = B()

定义抽象类需要使用abc库,这里我们装饰了实例方法mine,实际上也可以装饰其他东西,读者可自己完成。

执行无输出,程序结束。我们成功定义了一个含有抽象方法mine的抽象类A,并由B继承它,完成了B的实例化

但如果我们执行下面的代码:

dart 复制代码
import abc

class A(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def mine(self):
        pass

class B(A):
    pass

b = B()

程序会报错:

dart 复制代码
TypeError: Can't instantiate abstract class B with abstract method mine

也就是说,由于B继承自抽象类A,B必须实现A中的所有抽象方法,我们才能顺利将B实例化。

相关推荐
时间的拾荒人31 分钟前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
敲上瘾40 分钟前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
合尘猫1 小时前
图片表格变结构化数据:OCR 后的三个坑
python·ocr
小小张说故事1 小时前
Python 里弱引用到底弱在哪:拆开 weakref.ref、回调陷阱和 WeakValueDictionary
python
用户019027581612 小时前
用 DuckDB 存查 A 股 K 线:零服务、SQL 直接分析
python
码途行者2 小时前
网站的SQL 注入:从攻击原理到防御措施
开发语言·sql·php
旖旎夜光2 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
你看我名字2 小时前
产品参数昨天还对,今天已过期:数眼智能与大模型应用如何做资料版本校验
开发语言·架构
程序员果子3 小时前
本体构建方法
人工智能·python·知识图谱·agent框架·本体
老秦包你会3 小时前
计算机网络第二课 ----Socket(套接字)编程预备
开发语言·计算机网络·php