• Python_day19(2018.7.27)-(抽象类,接口类,多态,封装)


    今日内容大纲
    01 抽象类,接口类
    制定一个规范
    02 多态
    03 封装


    抽象类,接口类
    # from abc import ABCMeta,abstractmethod
    #
    #
    # class Payment(metaclass=ABCMeta): # 抽象类(接口类):
    # @abstractmethod
    # def pay(self): pass # 制定了一个规范
    # @abstractmethod
    # def func(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 是对象名字
    # obj.pay()
    # w1 = Wechatpay(200)
    # a1 = Alipay(200)
    # j1 = Jdpay(100)
    # pay(a1) # 归一化设计
    # pay(j1)
    #
    # w1 = Wechatpay(300)
    # w1.weixinpay()



    ---------------------抽象类,接口类----------------------
    第一版  
    # 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()

    各个支付类都是单独的,实例化对象之后,对象各自调用类中的pay支付方法.

    ----------------第二版本-------------------

    # 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(j1)


    各个类还是单独的,但是对于类内部的支付方法pay是统一的命名规则,在最终结尾出单独定义一个pay函数,其中个传递的参数是支付类实例化出来的对象.
    但是其中对于只用同样的pay支付方法,并没有强制要求.

    ------------------第三版------------------------

    # from abc import ABCMeta,abstractmethod              #调用两个模块,并定义一个类,作为一个规范,并且后面的类继承这个类,


    #
    #
    # class Payment(metaclass=ABCMeta): # 抽象类(接口类):
    # @abstractmethod
    # def pay(self): pass # 制定了一个规范
    # @abstractmethod
    # def func(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)
    #
    # w1 = Wechatpay(300)
    # w1.weixinpay()



    --------------------鸭子类型-------------------------

    # python没有多态?他有什么? 他有鸭子类型.
    # 鸭子类型 : 看着像鸭子,他就是鸭子.

    # 这些类 都互称为鸭子.

    # class Str:
    # def index(self):
    # pass

    # class List:
    # def index(self):
    # pass
    #
    # class Tuple:
    # def index(self):
    # pass


    ***比如说在str,List,Tuple这几个类型中,全部都含有index()这个方法,所以str,List,Tuple互相称伟鸭子类型.



    
    
    
    
    
    



  • 相关阅读:
    调试WEB APP多设备浏览器
    Android病毒家族及行为(一)
    如何判断Android设备是否为模拟器
    python操作MongoDB
    python面试题大全(二)
    白话经典算法系列之——快速排序
    白话经典算法系列之——希尔排序的实现
    白话经典算法系列之——直接插入排序的三种实现
    白话经典算法系列之——冒泡排序的三种实现(转)
    MySQL 数据库赋予用户权限操作表
  • 原文地址:https://www.cnblogs.com/kcwxx/p/9379608.html
Copyright © 2020-2023  润新知