前言

abc标准库最大的作用是指引如何远离造轮子的怪圈。
python本身并没有抽象类,抽象函数。需要通过abc库提供。
abc和程序设计模式密切相关。程序设计模式参见blog文献。

抽象超类:接口模式

实现方式:在Python3.0中,定义class类使用一个关键字参数metaclass等于抽象超类ABCMeta,以及特殊的@装饰器语法实现,必须由子类重载的方法用assert或者raise NotImplementedError异常来指明子类必须重载。
固,当子类没有重载抽象方法时不能实例化的。

from abc import ABCMeta, abstractmethod'''
接口:一种特殊类声明了若干方法,要求继承该接口的类必须实现这种方法。
作用:限制继承接口的类的方法的名称及调用方式,隐藏了类的内部实现。
接口类的实现主要为了接口化,归一化,统一化,就是每个类的方法都有固定的名称。
'''# Payment支付接口:定义的一种特殊的类!
class Payment(metaclass=ABCMeta):# 抽象产品角色@abstractmethoddef pay(self, money):raise NotImplementedError  # 继承接口的类必须实现这个方法,否则报错!class AliPay(Payment):# 具体产品角色def __init__(self, enable_yuebao=False):self.enable_yuebao = enable_yuebaodef pay(self, money):if self.enable_yuebao:print(f"使用余额宝支付{money}元")else:print(f"使用支付宝支付{money}元")class ApplePay(Payment):# 具体产品角色def pay(self, money):print(f"使用苹果支付{money}元")class WeChartPay(Payment):# 具体产品角色def pay(self, money):print(f"使用微信支付{money}元")class YinLianPay(Payment):# 具体产品角色def pay(self, money):print(f"使用银联支付{money}元")if __name__ == "__main__":while True:ali = AliPay()apple = ApplePay()wechart = WeChartPay()ways = input("请输入支付方式:支付宝、微信 or 苹果:")if ways == "支付宝":ali.pay(10)breakelif ways == "微信":wechart.pay(20)breakelif ways == "苹果":apple.pay(15)breakelse:NameError

以上为基本的接口模式!

抽象超类:工厂方法模式

"""
工厂方法模式:
定义:定义一个创建对象的接口(工厂接口),让子类决定实例化哪个接口
角色:抽象工厂角色,具体工厂角色,抽象产品角色,具体产品角色
适用场景:需要生产多种,大量复杂对象的时候,需要降低代码耦合度的时候,当系统中的产品类经常需要扩展的时候
优点:每个具体的产品都对应一个具体工厂,不需要修改工厂类的代码,工厂类可以不知道它所创建的具体的类,隐藏了对
象创建的实现细节
缺点:每增加一个具体的产品类,就必须增加一个相应的工厂类
"""
from abc import ABCMeta, abstractmethod
from first_design.interface_design import AliPay, ApplePay, WeChartPay, YinLianPay# 抽象工厂+工厂方法模式
class PaymentFactoryAbs(metaclass=ABCMeta):# 抽象工厂@abstractmethoddef create_payment(self, method):raise NotImplementedErrorclass PaymentFactory1(PaymentFactoryAbs):# 工厂角色def create_payment(self, method):if method == 'alipay':return AliPay()elif method == 'yuebao':return AliPay(True)elif method == 'applepay':return ApplePay()elif method == 'weixin':return WeChartPay()else:return NameErrorclass PaymentFactory2(PaymentFactoryAbs):# 工厂角色def create_payment(self, method):if method == 'yinhang':return YinLianPay()else:return NameErrorif __name__ == "__main__":payment = PaymentFactory1()payment2 = PaymentFactory2()pay1 = payment.create_payment('weixin').pay(5)pay2 = payment.create_payment('alipay').pay(15)pay3 = payment.create_payment('yuebao').pay(25)pay4 = payment.create_payment('applepay').pay(35)pay5 = payment2.create_payment('yinhang').pay(45)

总结

abc库的抽象超类和抽象方法,装饰器等影响程序设计模式。有规范软件编程的作用。

python标准库abc的实用技巧相关推荐

  1. 转Python 标准库 urllib2 的使用细节

    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 P ...

  2. Python 标准库 urllib2 的使用细节

    刚好用到,这篇文章写得不错,转过来收藏.    转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...

  3. [python教程入门学习]Python标准库映射类型与可散列数据类型的关系

    本文章向大家介绍Python标准库映射类型与可散列数据类型的关系,主要包括Python标准库映射类型与可散列数据类型的关系使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋 ...

  4. python标准库导入对象语句_下面哪些是正确的Python标准库对象导入语句?-智慧树Java程序设计(山东联盟-鲁东大学)章节答...

    Java程序设计(山东联盟-鲁东大学):下面哪些是正确的Python标准库对象导入语句?[单选题] A:保证两个或多个进程同时启动和结束 B:保证两个或多个线程同时启动和结束 C:保证任何时候只有一个 ...

  5. Python标准库介绍

    1. 关于Python标准库 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现各项功能,前辈大牛们打造了多种多样的工具库公开提供给大众使用,而越来越多的库已经因为使用的广泛 ...

  6. 不属于python标准库的是_《Python Cookbook(第2版)中文版》——1.10 过滤字符串中不属于指定集合的字符-阿里云开发者社区...

    本节书摘来自异步社区<Python Cookbook(第2版)中文版>一书中的第1章,第1.10节,作者[美]Alex Martelli , Anna Martelli Ravenscro ...

  7. python标准库不需要导入即可使用其中的所有对象和方法_Python程序设计-中国大学mooc-题库零氪...

    <Python程序设计基础>课程导学 单元测验 1.下面属于Python应用领域的有? A.数据分析 B.云计算 C.开发操作系统 D.网络安全 E.树莓派 F.数据可视化 2.在Wind ...

  8. python标准库不需要导入即可使用其中的所有对象和方法_Python编程及应用-中国大学mooc-题库零氪...

    <Python程序设计基础>课程导学 单元测验 1.下面属于Python应用领域的有? A.数据分析 B.云计算 C.开发操作系统 D.网络安全 E.树莓派 F.数据可视化 2.在Wind ...

  9. Python标准库:一些受欢迎的模块

    目录 1.模块sys 1).介绍 1.模块sys中一些重要的函数和变量 2.变量sys.argv 3.函数sys.exit 4.映射sys.modules 5.变量sys.path 6.变量sys.p ...

  10. 转--Python标准库之一句话概括

    作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...

最新文章

  1. LeetCode实战:全排列
  2. Scala入门到精通——第十六节 泛型与注解
  3. 调用模块,加入系统路径
  4. 软件工程个人作业03—找水王
  5. 用ado.net生成对应的sql语句
  6. 单机最大负载_电流互感器允许接入的实际最大二次负载(注电案例1865)
  7. 古典绘画水墨文化艺术插图手绘合集,再也不愁没有设计灵感!
  8. SOA架构,面向信号怎么就不香了,以及工程师的四个技术维度:编程,架构,网络,工具
  9. 常见图片格式总结--网页设计必备
  10. IBASE4J开发环境搭建
  11. 京东分类页面部分的实现
  12. linux exosip编译,eXosip2 osip 编译安装
  13. 【人脸识别】arcface-pytorch代码解析
  14. 算法题6 b站扭蛋机
  15. CentOS7 个性化
  16. 使用Ajax进行前后端交互(一)
  17. 实用又救急!快速恢复误删文件!
  18. 协方差及协方差矩阵的理解
  19. 新手程序员如何快速成长?
  20. 计通网项目四更新日志2021-06-10

热门文章

  1. Linux系统安装sudo
  2. ubuntu更新pip
  3. linux下的文件比对工具,Linux - 文件比对工具
  4. 转速恒压频比交流变频调速系统Simulink仿真,可观察到电压频率的变比情况以及电动机的转速波形
  5. 2020ISSCC 基于SRAM的存内计算15.5阅读记录
  6. 光猫需要已经开通了 telnet 功能
  7. 安川机器人如何注释化指令_安川机器人指令一览
  8. bias tee电路设计-电容电感值
  9. 续上回 python 双色球 大乐透5注随机选号之排除历史开奖号码
  10. nrf52840学习心得(一)