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

总结:抽象类的定义是只能使用继承方法调用,并且自身不能实例化的类。
这个例子采用了接口类(抽象类)的多继承方法,对子类的方法做出了一些规范,子类在继承父类的时候必须实现父类的某些方法。

补充:两个不同的类具有相似的类方法(有几个相同,有几个不同),我们把这两个类叫做鸭子类型。

posted @ 2019-03-30 16:10  不会玩python  阅读(3)  评论(0编辑  收藏  举报