• 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互相称伟鸭子类型.



    
    
    
    
    
    



  • 相关阅读:
    chapter02“良/恶性乳腺癌肿瘤预测”的问题
    ASCII编码和Unicode编码的区别
    Spring AOP概述
    Spring 基于注解的配置
    Spring Bean作用域&FactoryBean
    Spring <bean> 之间的关系&整合多个配置文件
    Spring 方法注入
    Spring 简化装配Bean的配置方式
    Spring 注入参数详解
    vue-router 导航守卫
  • 原文地址:https://www.cnblogs.com/kcwxx/p/9379608.html
Copyright © 2020-2023  润新知