首页 > 其他分享 >abc模块

abc模块

时间:2024-12-22 20:19:25浏览次数:8  
标签:abc 子类 self hi 模块 基类 hello def

abc: 是 Python 标准库中的一个模块,主要用于定义抽象基类(Abstract Base Classes)。抽象基类提供了一种机制,允许我们在面向对象编程中定义接口,以确保子类实现特定的方法或属性。
示例代码:

from abc import ABC, abstractmethod

class ABCBase(ABC):
    @abstractmethod
    def hello(self):
        pass

    def hi(self):
        pass

class MyClass(ABCBase):
    def fun(self):
        print('this is fun')

上述代码运行不报错。但是当对MyClass进行实例化时,就会提示错误。
myclass = MyClass()
错误提示:

Traceback (most recent call last):
  File "F:\RolandWork\PythonProjects\studyPython\forTest.py", line 15, in <module>
    myclass = MyClass()
              ^^^^^^^^^
TypeError: Can't instantiate abstract class MyClass with abstract method hello

原因是我们定义了抽像基类后,继承它的子类要实现所有基类里的抽象方法。 所以我们在子类中增加对基类中抽象方法hello的实现,就不会再报错了。

from abc import ABC, abstractmethod

class ABCBase(ABC):
    @abstractmethod
    def hello(self):
        pass

    def hi(self):
        print('基类 say hi')

class MyClass(ABCBase):
    def fun(self):
        print('this is fun')

    def hello(self):
        print('子类 say hello')

myclass = MyClass()
myclass.hello()
myclass.hi()

输出结果:

子类 say hello
基类 say hi

并且,只要是基类和子类的方法名相同,即便方法签名不同,也不报错。

from abc import ABC, abstractmethod

class ABCBase(ABC):
    @abstractmethod
    def hello(self, name):
        pass

    @abstractmethod
    def hi(self):
        print('基类 say hi')

class MyClass(ABCBase):
    def hello(self):
        print('子类 say hello')

    def hi(self, name):
        print('子类 say hi', name)

myclass = MyClass()
myclass.hello()
myclass.hi('Roland')

输出结果:

子类 say hello
子类 say hi Roland

标签:abc,子类,self,hi,模块,基类,hello,def
From: https://www.cnblogs.com/rolandhe/p/18622471

相关文章

  • 一种隐藏VBA代码模块和恢复可见的方法
        为了保护自己写的VBA程序代码不被他人抄袭,你可能想到给程序添加查看密码。然而这种密码是很容易被破解的,其中的一种破解方法详见我之前写的一篇文章:如何把Excel的VBA程序封装成DLL并分发给他人使用。其实还有很多种破解方法,包括下面即将介绍的这种隐藏代码模块的方法......
  • Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
    前言:在Python编程的广阔天地中,字符串处理无疑是一项基础而关键的技能。正则表达式,作为处理字符串的强大工具,以其灵活的模式匹配能力,在文本搜索、数据清洗、格式验证等领域发挥着不可替代的作用。本系列博客已经带领大家逐步深入了Python字符串操作的多个方面,从基础的字......
  • 题解:AT_abc294_g [ABC294G] Distance Queries on a Tree
    题目链接https://www.luogu.com.cn/problem/AT_abc294_g分析先不考虑修改。设\(dist_i\)表示从根节点到第\(i\)号节点的距离,\(\operatorname{lca(u,v)}\)表示树上两点\(u,v\)的最近公共祖先,那么\(u,v\)两点间的距离就是\((dist_{\operatorname{lca(u,v)}}-dist_u)+(......
  • SD模块-专题方案-销项税MWST税率确定逻辑(事务码VK11 & 后台表A002 & KNOH & KONP)
    销项税税率确定逻辑如下:1处,显示客户税分类来源于BP客户主数据-销售与分销视图2处,显示物料税分类来源于物料主数据销售视图23处,显示VK13维护的销项税税率17%4处,显示VA43销售合同中最终进行的销项税税率确定的17%税率事务码VK11维护销项税税率还是需要使用事务码FTXP查看......
  • (即插即用模块-特征处理部分) 十二、(2023) SDM 语义差异引导模块
    文章目录1、SemanticDifferenceGuidanceModule2、代码实现paper:PnPNet:Pull-and-PushNetworksforVolumetricSegmentationwithBoundaryConfusionCode:https://github.com/AlexYouXin/PnPNet1、SemanticDifferenceGuidanceModule为了解决以下几个问......
  • Python模块之threading
    模块作用简介:Python模块之threadingthread模块基本被废弃了,现在多用threading模块来创建和管理子线程有两种方式来创建线程:第一种是:用class继承Thread类,并重写它的run()方法;第二种是:在实例化threading.Thread对象的时候,将线程要执行的任务函数作为参数传入线程。......
  • Python模块之thread
    模块作用简介:Python模块之thread,此模块基本废弃,建议使用threadingPython模块之threading:https://www.cnblogs.com/wutou/p/18621520官方英文帮助:https://docs.python.org/3/library/官方简体中文帮助:https://docs.python.org/zh-cn/3/library/必要操作:>>>......
  • 32.Python基础篇-socketserver模块
    socketserver模块是什么?是Python中一个用于简化基于socket的网络服务实现的模块。它提供了一些高层次的类,帮助开发者更容易地实现网络服务。可以实现并发请求处理使用socketserver实现的server端,代码演示:importsocketserver#导入socketserver模块,用于简化基于sock......
  • 31.Python基础篇-hmac模块
    hmac与hashlib模块的区别hmac模块基于hashlib提供的哈希算法,在计算哈希时加入了一个“密钥”。主要用于生成“消息认证码”(MAC),通过一个密钥和数据共同生成哈希值,以此来验证数据的完整性和身份。需要密钥,它的目的是防止消息篡改并验证消息是否来源于可信的发送方。hashlib......
  • 30.Python基础篇-socket模块
    介绍socket模块是用于实现网络通信的模块。它提供了底层网络操作的接口,使得用户可以通过网络实现客户端和服务器之间的数据传输。通过socket模块,程序可以通过网络进行数据传输、连接和通信。使用socket模块创建一个TCP服务server端代码#server端代码importsocketsk......