美文网首页python学习
深入理解 Python 类和对象(1) - 鸭子类型和多态

深入理解 Python 类和对象(1) - 鸭子类型和多态

作者: DejavuMoments | 来源:发表于2018-11-30 13:51 被阅读3次

    什么是鸭子类型?

    class Duck:
        def say(self):
            print('I am a duck')
    
    
    class Cat:
        def say(self):
            print('I am a cat')
    
    
    class Dog:
        def say(self):
            print('I am a dog')
    
    
    animal = Cat
    animal().say()
    

    Java 中实现多态,需要继承父类,并覆盖父类中的方法。

    Python 中实现多态,不需要继承任何东西,只需要实现共同的方法名就行了。比如上面代码中,三个类共同实现了同一个方法,而且名称一样,那么这些类可以归为一种类型,这样的话在调用的时候便可以同时调用它们的say()方法。以此就达到了多态的效果。

    animal_lst = [Duck, Cat, Dog]
    for animal in animal_lst:
        animal().say()
    
    >>>
    输出:
    I am a cat
    I am a duck
    I am a cat
    I am a dog
    

    得益于 Python 的动态性,这一切的实现变得特别的简单,不需要继承和实现任何东西。

    比如列表 (list) 的方法extend()对于其他 iterable 类型都可以。

    def extend(iterable)
    L.extend(iterable) -> None -- extend list by appending elements from the iterable
    
    a = ['s','c','p']
    b = ['r','e','w']
    named_tuple = set()
    named_tuple.add('q')
    named_tuple.add('z')
    named_tuple.add('o')
    
    a.extend(b)
    print(a)
    
    a.extend(named_tuple)
    print(a)
    
    >>>
    
    ['s', 'c', 'p', 'r', 'e', 'w']
    ['s', 'c', 'p', 'r', 'e', 'w', 'q', 'z', 'o']
    

    类中若实现了__getitem__ 方法,其实例化的对象就可以变成可迭代对象

    相关文章

      网友评论

        本文标题:深入理解 Python 类和对象(1) - 鸭子类型和多态

        本文链接:https://www.haomeiwen.com/subject/sxkcqqtx.html