• 面向对象——多态


    多态

    1.多态和多态性

    多态:指同一种事物的多种形态。比如水,可以是水蒸汽、雪、雨等多种形态。
    多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象。

    (1).例子一

    s1 = "hello "
    s2 = "world"
    
    d1 = 500
    d2 = 20
    
    print(s1 + s2) # hello world
    print(d1 + d2) # 520

    站在"+"的角度去看,它并不关心左右两边操作数的类型。所以它是多态的一种表现形式,其实我们见到的有很多。

    (2).例子二

    # 多态:同一类事物的多种形态
    import abc
    
    class Animal(metaclass=abc.ABCMeta):  # 同一类事物:动物
        @abc.abstractmethod
        def talk(self):
            pass
    
    
    class People(Animal):  # 动物的形态之一:人
        def talk(self):
            print('say hello')
    
    
    class Dog(Animal):  # 动物的形态之二:狗
        def talk(self):
            print('say wangwang')
    
    
    class Pig(Animal):  # 动物的形态之三:猪
        def talk(self):
            print('say aoao')
    # 多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象
    peo1 = People()
    dog1 = Dog()
    pig1 = Pig()
    
    # 不用关心对象的类型
    # peo1.talk()
    # dog1.talk()
    # pig1.talk()
    
    # 实现一种接口
    def func(animal):
        animal.talk()
    
    # 不用关心参数的类型
    func(peo1)
    func(pig1)
    func(dog1)

    2. 鸭子类型

    解释:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”,

    我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。python崇尚的就是它。

    #序列类型:列表list,元组tuple,字符串str
    
    l=list([1,2,3])
    t=tuple(('a','b','c'))
    s=str('hello')
    
    # 不关注类型,只关注它是如何实现行为的
    # print(l.__len__())
    # print(t.__len__())
    # print(s.__len__())
    
    # def len(obj):
    #     return obj.__len__()
    
    # 不关注对象的类型,只要它依据 '鸭子类型' 像序列,那它就是序列。所以len()的参数并不关心其类型
    print(len(l)) # 3
    print(len(t)) # 3
    print(len(s)) # 5
  • 相关阅读:
    JavaScript解析顺序和变量作用域
    JS-BOM
    原生对象-Array
    JavaScript01
    css3动画
    scc的使用
    CSS3学习总结
    Js数组方法大全
    JavaScript判断变量是否为数组
    浏览器兼容性问题及解决方案
  • 原文地址:https://www.cnblogs.com/ykgo/p/9351724.html
Copyright © 2020-2023  润新知