zoukankan      html  css  js  c++  java
  • 广度优先和深度优先 父类对子类的约束 多态 鸭子模型

    类的继承顺序

    1. 只要继承object的就是新式类,不继承object就是经典类(只存在于python2X)

    2. 经典类与新式类的多继承

      1. 在经典类中都是深度优先,在一条路走不通止呕再换一条路,走过的点不会重复

         

      2. 新式类中遵循广度优先:C3算法,print(类名.mro())来查看

    3. 父类对子类的约束

      1. 之前使用的都是普通的类

      2. 抽象类:是一个开发的规范,约束它的所有子类必须实现一些和它同名的方法

         1  # class Payment:     # 抽象类
         2  #     def pay(self,money):
         3  #         '''只要你见到了项目中有这种类,你要知道你的子类中必须实现和pay同名的方法'''
         4  #         raise NotImplementedError('请在子类中重写同名pay方法')     方法一:主动抛异常
         5  #
         6  # class Alipay(Payment):
         7  #     def __init__(self,name):
         8  #         self.name = name
         9  #     def pay(self,money):
        10  #         dic = {'uname':self.name,'price':money}
        11  #         # 想办法调用支付宝支付 url连接 把dic传过去
        12  #         print('%s通过支付宝支付%s钱成功'%(self.name,money))
        13  #
        14  # class WeChat(Payment):
        15  #     def __init__(self,name):
        16  #         self.name = name
        17  #     def pay(self,money):
        18  #         dic = {'username':self.name,'money':money}
        19  #         # 想办法调用微信支付 url连接 把dic传过去
        20  #         print('%s通过微信支付%s钱成功'%(self.name,money))
        21  #
        22  # class Apple(Payment):
        23  #     def __init__(self,name):
        24  #         self.name = name
        25  #     def pay(self,money):
        26  #         dic = {'name': self.name, 'number': money}
        27  #         # 想办法调用苹果支付 url连接 把dic传过去
        28  #         print('%s通过苹果支付%s钱成功' % (self.name, money))
        29 30  # aw = WeChat('alex')
        31  # aw.pay(400)
        32  # aa = Alipay('alex')
        33  # aa.pay(400)
        34  # 归一化设计
        35  # def pay(name,price,kind):
        36  #     if kind == 'Wechat':
        37  #         obj = WeChat(name)
        38  #     elif kind == 'Alipay':
        39  #         obj = Alipay(name)
        40  #     elif kind == 'Apple':
        41  #         obj = Apple(name)
        42  #     obj.pay(price)
        43  #
        44  # pay('alex',400,'Wechat')
        45  # pay('alex',400,'Alipay')
        46  # pay('alex',400,'Apple')
        47 48  # appa = Apple('alex')
        49  # appa.fuqian(500)
         1  # 实现抽象类的另一种方式,约束力强,依赖abc模块
         2  # from abc import ABCMeta,abstractmethod
         3  # class Payment(metaclass=ABCMeta):
         4  #     @abstractmethod
         5  #     def pay(self,money):pass
         6  #         '''只要你见到了项目中有这种类,你要知道你的子类中必须实现和pay同名的方法'''
         7  #
         8  # class Alipay(Payment):
         9  #     def __init__(self,name):
        10  #         self.name = name
        11  #     def pay(self,money):
        12  #         dic = {'uname':self.name,'price':money}
        13  #         # 想办法调用支付宝支付 url连接 把dic传过去
        14  #         print('%s通过支付宝支付%s钱成功'%(self.name,money))
        15  #
        16  # class WeChat(Payment):
        17  #     def __init__(self,name):
        18  #         self.name = name
        19  #     def pay(self,money):
        20  #         dic = {'username':self.name,'money':money}
        21  #         # 想办法调用微信支付 url连接 把dic传过去
        22  #         print('%s通过微信支付%s钱成功'%(self.name,money))
        23  #
        24  # WeChat('alex')
    4. 多态:python处处是多态,一切皆对象

      1. 什么是多态:一个类表现出的多种形态,实际上是通过继承来完成的

      2. 在java情况下: 一个参数必须制定类型所以如果想让两个类型的对象都可以传,那么必须让这两个类继承自一个父类,在制定类型的时候使用父类来指定

    5. 鸭子类型:有同一个方法的叫做鸭子类型(__iter__以及__next__都叫鸭子类型)这不是继承

  • 相关阅读:
    nginx增加lua支持
    使用nginx+lua实现web项目的灰度发布
    amoeba学习
    信号有关的内容
    Linux系统的进程相关内容
    等待类型
    孤立用户故障排除
    恢复数据库
    执行计划之Insert,update,delete
    临时表和表变量
  • 原文地址:https://www.cnblogs.com/zhangxiangning/p/10266786.html
Copyright © 2011-2022 走看看