abcstracmethod模块规范类定义(抽象类=接口类)+鸭子类型的定义
from abc import abstractmethod,ABCMeta #abstract Base Meta
class Payment(metaclass=ABCMeta): #元类继承ABCMeta
@abstractmethod #装饰器装饰pay方法。
def pay(self,money):pass
'''
经过上述处理的pay方法在继承Payment的子类中是必须被实现的。
'''
class Wechat(Payment):
def pay(self,money):
print('已经用微信支付了%s元'%money)
class Alipay(Payment):
def zhifu(self,money):
print('已经用阿里钱包支付了%s元' % money)
wechat = Wechat()
wechat.pay('100')
alipay = Alipay()
alipay.pay('200')
程序运行结果:
已经用微信支付了100元
Traceback (most recent call last):
File “C:/Users/Jonathan/Desktop/python学习重要项目/day49/NB_DB/抽象类”, line 21, in
alipay = Alipay()
TypeError: Can’t instantiate abstract class Alipay with abstract methods pay
总结:抽象类的定义是只能使用继承方法调用,并且自身不能实例化的类。
这个例子采用了接口类(抽象类)的多继承方法,对子类的方法做出了一些规范,子类在继承父类的时候必须实现父类的某些方法。
补充:两个不同的类具有相似的类方法(有几个相同,有几个不同),我们把这两个类叫做鸭子类型。