zoukankan      html  css  js  c++  java
  • day25接口类抽象类封装

    复习:

    # 继承 : 什么是什么的关系
    # 单继承 *****
    # 先抽象再继承,几个类之间的相同代码抽象出来,成为父类
    # 子类自己没有的名字,就可以使用父类的方法和属性
    # 如果子类自己有,一定是先用自己的
    # 在类中使用self的时候,一定要看清楚self指向谁
    # 多继承 ***
    # 新式类和经典类:
    # 多继承寻找名字的顺序 : 新式类广度优先,经典类深度优先
    # 新式类中 有一个类名.mro方法,查看广度优先的继承顺序
    # python3中 有一个super方法,根据广度优先的继承顺序查找上一个类

    #接口类:Python原生不支持
    #抽象类:Python原生支持
    #接口类和抽象类只是一种思想
    # 规范 :接口类或者抽象类都可以
    # 接口类 支持多继承,接口类中的所有的方法都必须不能实现 —— java
    # 抽象类 不支持多继承,抽象类中方法可以有一些代码的实现 —— java
    from abc import abstractmethod,ABCMeta
    class Payment(metaclass=ABCMeta): # 元类 默认的元类 type
    @abstractmethod
    def pay(self,money):pass # 没有实现这个方法
    class Wechat(Payment):
    def pay(self,money):
    print('已经用微信支付了%s元'%money)
    class Alipay(Payment):
    def pay(self,money):
    print('已经用支付宝支付了%s元' % money)
    class Applepay(Payment):
    def pay(self,money):
    print('已经用applepay支付了%s元' % money)
    def pay(pay_obj,money): # 统一支付入口
    pay_obj.pay(money)

    app = Applepay()
    p = Payment()

    #一切皆文件
    import abc #利用abc模块实现抽象类
    class All_file(metaclass=abc.ABCMeta):
    all_type='file'
    @abc.abstractmethod #定义抽象方法,无需实现功能
    def read(self):
    '子类必须定义读功能'
    with open('filaname') as f:
    pass

    @abc.abstractmethod #定义抽象方法,无需实现功能
    def write(self):
    '子类必须定义写功能'
    pass

    class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
    def read(self):
    print('文本数据的读取方法')
    def write(self):
    print('文本数据的读取方法')

    class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
    def read(self):
    print('硬盘数据的读取方法')

    def write(self):
    print('硬盘数据的读取方法')

    class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
    def read(self):
    print('进程数据的读取方法')

    def write(self):
    print('进程数据的读取方法')

    wenbenwenjian=Txt()

    yingpanwenjian=Sata()

    jinchengwenjian=Process()

    #这样大家都是被归一化了,也就是一切皆文件的思想
    wenbenwenjian.read()
    yingpanwenjian.write()
    jinchengwenjian.read()

    print(wenbenwenjian.all_type)
    print(yingpanwenjian.all_type)
    print(jinchengwenjian.all_type)

    from abc import abstractmethod,ABCMeta
    class Swim_Animal(metaclass=ABCMeta):
    @abstractmethod
    def swim(self):pass

    class Walk_Animal(metaclass=ABCMeta):
    @abstractmethod
    def walk(self):pass

    class Fly_Animal(metaclass=ABCMeta):
    @abstractmethod
    def fly(self):pass

    class Tiger(Walk_Animal,Swim_Animal):
    def walk(self):
    pass
    def swim(self):
    pass
    class OldYing(Fly_Animal,Walk_Animal):pass
    class Swan(Swim_Animal,Walk_Animal,Fly_Animal):pass
    # 接口类 刚好满足接口隔离原则 面向对象开发的思想 规范



    # 抽象类 : 规范
    # 一般情况下 单继承 能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现
    # 多继承的情况 由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中
    # 抽象类还是接口类 : 面向对象的开发规范 所有的接口类和抽象类都不能实例化
    # java :
    # java里的所有类的继承都是单继承,所以抽象类完美的解决了单继承需求中的规范问题
    # 但对于多继承的需求,由于java本身语法的不支持,所以创建了接口Interface这个概念来解决多继承的规范问题

    # python
    # python中没有接口类 :
    # python中自带多继承 所以我们直接用class来实现了接口类
    # python中支持抽象类 : 一般情况下 单继承 不能实例化
    # 且可以实现python代码

    # 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种
    # 只让自己的对象能调用自己类中的方法

    # 狭义上的封装 —— 面向对象的三大特性之一
    # 属性 和 方法都藏起来 不让你看见
    class Person:
    __key = 123 # 私有静态属性
    def __init__(self,name,passwd):
    self.name = name
    self.__passwd = passwd # 私有属性
    def __get_pwd(self): # 私有方法
    return self.__passwd #只要在类的内部使用私有属性,就会自动的带上_类名
    def login(self): # 正常的方法调用私有的方法
    self.__get_pwd()
    alex = Person('alex','alex3714')
    print(alex._Person__passwd) # _类名__属性名
    print(alex.get_pwd())

    # 所有的私有 都是在变量的左边加上双下划綫
    # 对象的私有属性
    # 类中的私有方法
    # 类中的静态私有属性
    # 所有的私有的 都不能在类的外部使用

    # 多态 python 天生支持多态
    # def func(int num,str name):
    # pass
    #
    # func('alex',2)
    # class Payment:pass

    # class Alipay():
    # def pay(self,money):
    # print('已经用支付宝支付了%s元' % money)
    #
    # class Applepay():
    # def pay(self,money):
    # print('已经用applepay支付了%s元' % money)
    #
    # def pay(pay_obj,money): # 统一支付入口 归一化设计
    # pay_obj.pay(money)
    #
    # pay()

    # 什么是多态
    # python 动态强类型的语言
    # 鸭子类型
    # list tuple
    # 不崇尚根据继承所得来的相似
    # 我只是自己实现我自己的代码就可以了。
    # 如果两个类刚好相似,并不产生父类的子类的兄弟关系,而是鸭子类型
    # list tuple 这种相似,是自己写代码的时候约束的,而不是通过父类约束的
    # 优点 : 松耦合 每个相似的类之间都没有影响
    # 缺点 : 太随意了,只能靠自觉

    class List():
    def __len__(self):pass
    class Tuple():
    def __len__(self):pass

    def len(obj):
    return obj.__len__()

    l = Tuple()
    len(l)
    #
    # # 强类型语言 多态
    # # python 语言 鸭子类型
    # 接口类和抽象类 在python当中的应用点并不是非常必要




  • 相关阅读:
    各种数据类型的取值范围(总结全)
    Help Johnny-(类似杭电acm3568题)
    ExtJs 设置GridPanel表格文本垂直居中
    批处理通过字符串截取得到文件名
    sql优化-提防错误关联
    Unix Domain Socket 域套接字实现
    solr源码分析之数据导入DataImporter追溯。
    spark初识
    Spark:一个高效的分布式计算系统--转
    Importing/Indexing database (MySQL or SQL Server) in Solr using Data Import Handler--转载
  • 原文地址:https://www.cnblogs.com/Murraya/p/11209906.html
Copyright © 2011-2022 走看看