zoukankan      html  css  js  c++  java
  • 多态 与 鸭子类型 duck duck duck

    # -->
    
    '''
    
    多态 与 鸭子类型
    
    --> 什么是多态
            对象的多种状态,父类对象的多种 (子类对象) 状态
    
    
    --> 什么是鸭子类型:
            长的像就是
            1.规定有什么属性及什么方法的对象叫鸭子类型
            2.能提供出规定的属性与方法的对象就是鸭子
    
            函数内有.xxx .yyy方法
            传入的对象也必须要有.xxx .yyy才能运行
    
    '''
    
    
    # -- ( 多态 ) -------------------------------------------------------------------------------------------
    
    
    import abc
    class People(metaclass=abc.ABCMeta):
        def __init__(self,name):
            self.name = name
    
        def eat(self):
            print('eat')
        @abc.abstractmethod
        def speak(self):pass
    
    
    class Chinese(People):
        def speak(self):
            print('说中国话')
    
    class England(People):
        def speak(self):
            print('说英国话')
    
    
    if __name__ == '__main__':
    
        # def ask_someone(obj):
        # 多态的体现:功能或是需求,需要父类的对象,可以传入父类对象或任意子类对象
        # 一般都是规定需要父类对象,传入子类对象
        # 有抽象方法的父类不能被实例化 (假设因为被实例化后,就可以调用自己的抽象方法,没有意义)
        def ask_someone(obj):
            print('让%s上台演讲'%obj.name) # 父类提供,子类之间继承
            obj.speak()
            # 父类提供,英国和中国speak内容不同,
            # 调用abc模块装饰父类@abc.abstractmethod子类重写
    
        ch = Chinese('王大锤')
    
        # ch实例化,用了Chinses类,用继承的父类People中的自定义name,传入'王大锤'
        en = England('Tom')
    
        ask_someone(ch)
        # 调用函数ask_someone(obj) 传入ch的实例化 Chinese('王大锤')
        ask_someone(en)
    
        # England 类有.name .speak
        # ask_someone 方法有.name .speak需求
        # 即可直接传入
    
    # -- ( 鸭子类型 ) -------------------------------------------------------------------------------------------
    
    # 长的差不多的类,都具有一样的功能
  • 相关阅读:
    select、poll和epoll
    Linux 常用命令之文件和目录
    SmartPlant Review 帮助文档机翻做培训手册
    SmartPlant Foundation 基础教程 3.4 菜单栏
    SmartPlant Foundation 基础教程 3.3 标题栏
    SmartPlant Foundation 基础教程 3.2 界面布局
    SmartPlant Foundation 基础教程 3.1 DTC登陆界面
    SmartPlant Foundation 基础教程 1.4 SPF架构
    SmartPlant Foundation 基础教程 1.3 SPF其他功能
    SmartPlant Foundation 基础教程 1.2 SPF集成设计功能
  • 原文地址:https://www.cnblogs.com/max404/p/10753631.html
Copyright © 2011-2022 走看看