zoukankan      html  css  js  c++  java
  • python--抽象类,接口类

    python 没有接口这个概念

    接口类,抽象类: 制定一个规范.

    第一版

    class Alipay:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('使用支付宝支付了%s' % self.money)
    
    
    class Jdpay:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('使用京东支付了%s' % self.money)
    
    
    a1 = Alipay(200)
    a1.pay()
    j1 = Jdpay(100)
    j1.pay()

    结果:

    使用支付宝支付了200
    使用京东支付了100

    第二版  改进,让你支付的方式一样

    class Alipay:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('使用支付宝支付了%s' % self.money)
    
    
    class Jdpay:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('使用京东支付了%s' % self.money)
    
    
    def pay(obj):
        obj.pay()
    
    
    a1 = Alipay(200)
    j1 = Jdpay(100)
    pay(a1)  # 归一化设计,通过调用pay函数,执行对应类下的方法,类名.方法
    pay(j1)

    结果:

    使用支付宝支付了200
    使用京东支付了100

    第三版,制定规则,抽象类,接口类

    from abc import ABCMeta, abstractmethod
    
    
    class Payment(metaclass=ABCMeta):  # 抽象类(接口类):
        @abstractmethod
        def pay(self):
            pass  # 制定了一个规范
    
    
    class Alipay(Payment):
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('使用支付宝支付了%s' % self.money)
    
    
    class Jdpay(Payment):
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('使用京东支付了%s' % self.money)
    
    
    class Wechatpay(Payment):
    
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('使用微信支付了%s' % self.money)
    
    
    def pay(obj):
        obj.pay()
    
    
    w1 = Wechatpay(200)
    a1 = Alipay(200)
    j1 = Jdpay(100)
    pay(a1)  # 归一化设计
    pay(j1)

    结果:

    使用支付宝支付了200
    使用京东支付了100

    下面的类都继承了Payment类,Payment下面有个pay方法,使用了装饰器,如果继承了Payment类的类下面没有pay方法,实例化子类的时候会报错

  • 相关阅读:
    PAT-1057 Stack (树状数组 + 二分查找)
    PAT-1056 Mice and Rice (分组决胜问题)
    PAT-1080 Graduate Admission (结构体排序)
    PAT-1079 Total Sales of Supply Chain (树的遍历)
    PAT-1078 Hashing (散列表 二次探测法)
    PAT-1018 Public Bike Management(dijkstra + dfs)
    C语言qsort()函数的实现
    简说Python之Jupyter Notebook
    简说Python之ipython的pdb调试
    简说Python之flask-SQLAlchmey的web应用
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/13021834.html
Copyright © 2011-2022 走看看