Python抽象类应用详情
作者:勿忘--前行 发布时间:2022-03-24 17:41:13
标签:Python,抽象类,应用
抽象类作用:抽象类就是控制子类的方法的名称,要求子类必须按照父类的要求的实现指定的方法,且方法名要和父类保持一致
一、问题场景
主要使用场景是这样的
比如京东上买东西,买完东西后需要支付,京东可以使用支付宝进行支付,也可以通过微信支付,也可以通过京东白条支付,也可以通过apppay
支付,
每种支付需要走内部的流程。
支付的统一入口是京东,但是点击不同的支付,需要走不同的流程,京东这边的流程就需要调用不同的函数;
那统一入口这里的调用起来就会比较麻烦
class Ali(object):
def alipay(self):
pass
class Ten(object):
def tenpay(self):
pass
class App(object):
def apppay(self):
pass
都是一个支付,阿里的支付、腾讯的支付、苹果的支付方法名都不一样、
二、使用抽象类思想解决
此时我们就可以引入python
中的抽线类
首先需要引入2个模块:
from abc import ABCMeta
from abc import abstractmethod
实现代码如下:
1、错误写法
from abc import ABCMeta
from abc import abstractmethod
# Payclass就是一个抽象类
class Pay(metaclass=ABCMeta):
@abstractmethod
def pay(self):
# 定义支付的基础接口
pass
class AliPay(Pay):
def ali_pay(self):
print("这是支付宝支付")
class WetPay(Pay):
def wet_pay(self):
print("这是微信支付")
class HuaweiPay(Pay):
def hua_pay(self):
print("这是华为支付")
比如我们没有按照要求实例化pay这个方法,执行代码会抛错
2、改进写法
那我们就按照要求修改代码即可,这次实例化就不会抛错:
from abc import ABCMeta, abstractmethod
class Pay(metaclass=ABCMeta):
@abstractmethod
def pay(self):
# 定义支付的基础接口
pass
class AliPay(Pay):
def pay(self):
print("这是支付宝支付")
class WetPay(Pay):
def pay(self):
print("这是微信支付")
class HuaweiPay(Pay):
def pay(self):
print("这是华为支付")
AliPay().pay()
执行可成功,结果如下:
3、继续优化
以在定义一个函数,搭配抽线类来实现,这个的第一个参数就是每个支付的实例,另外一个参数就是每个支付需要的参数
def pay(obj,*args,**kwargs):
obj.pay(*args,**kwargs)
详情如下:
from abc import ABCMeta, abstractmethod
class Pay(metaclass=ABCMeta):
@abstractmethod
def pay(self):
# 定义支付的基础接口
pass
class AliPay(Pay):
def pay(self, *args, **kwargs):
print("这是支付宝支付{0}".format(args[0]))
class WetPay(Pay):
def pay(self, *args, **kwargs):
print("这是微信支付{0}".format(args[0]))
class HuaweiPay(Pay):
def pay(self, *args, **kwargs):
print("这是华为支付{0}".format(args[0]))
def pay(obj, *args, **kwargs):
obj.pay(*args, **kwargs)
if __name__ == "__main__":
ali_pay = AliPay()
wet_apy = WetPay()
pay(ali_pay, 100)
pay(wet_apy, 1000)
三、使用抽象类的注意事项
1、抽象类不能被实例化
2、子类需要严格遵守父类的抽象类的规则,而孙类不需要遵守这个规则
3、如果想使用抽象类,则该类只需要继承抽象类即可
来源:https://blog.csdn.net/hey_man2017/article/details/124382769
0
投稿
猜你喜欢
- 前言本文主要给大家介绍了关于Python用字符串调用函数或方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:先看一个例子:&
- 通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割
- 在上一篇文章中 ,我说到:强硬的把CSS和HTML塞到PHP里面可以防止代码太枯燥(DRY)并最终导致代码臃肿,因为的CSS和HTML需要比
- 我们平常在网页上显示的字体最小一般是12PX,当小于10PX时,显示的效果就大打折扣了,因为中文默认的字体是宋体,当小于12PX时的效果如下
- 求最大公约数是习题中比较常见的类型,下面小编会给大家提供五种比较常见的算法,记得帮忙点个赞哦!一般来说,最大公约数的求法大概有5种方法一:短
- 引言昨天把系分的项目又加了一点逻辑判断,比如已经下单的菜品不能减少,不能重复下单,应该先下单再支付等…弄完购物车的逻辑之后,发现一直没有管备
- 使用mysql二进制方式启动连接您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库。实例以下是从命令行中连接m
- Jon Wiley, User Experience Designer for Google Apps, outlined some of
- 概要本文只是简单的介绍动态规划递归、非递归算法实现案例一题目一:求数组非相邻最大和[题目描述]在一个数组arr中,找出一组不相邻的数字,使得
- 用 ASP (using jscript) 在服务端创建 GUID 的代码如下:function GUID(){ ret
- gojson是快速解析json数据的一个golang包,你使用它可以快速的查找json内的数据安装 go get github.com/wi
- 什么是目标检测目标检测关注图像 * 定的物体目标,需要同时解决解决定位(localization) + 识别(Recognition)。相比分
- 之前一篇文章里提到了利用Cython来编译Python,这次来讲一下如何用Cython给Python写扩展库。两种语言混合编程,其中最重要的
- 如何制作一个WAP手机的WML网页?代码如下:<%@Language=VBScriptMaxNoAds = 10'
- 这是一种相对比较复杂的图表,但是仍然遵循上篇中提出的最基本的思路。本例中使用的定义列表标签dl可能平常我们见得不多,一般我们在做列表的时候通
- 本文实例为大家分享了python定时发送邮件的具体代码,供大家参考,具体内容如下全部代码如下:import timefrom datetim
- 本文为大家分享了python实现彩票系统的具体代码,供大家参考,具体内容如下功能:1、注册 2、登录 3、充钱&nb
- python 统计代码行数简单实例送测的时候,发现需要统计代码行数于是写了个小程序统计自己的代码的行数。#calclate_co
- 1.open使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。fi
- 今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩