关于python:深入类和对象鸭子类型和多态

3次阅读

共计 931 个字符,预计需要花费 3 分钟才能阅读完成。

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就能够被叫做鸭子。

1. 多个类中定义同一个办法,调用时就能够实现多态

例子 1

class Cat:
    def say(self):
        print('I am a cat')
class Dog:
    def say(self):
        print('I am a dog')
class Duck:
    def say(self):
        print('I am a duck')
animal_list = [Cat, Dog, Duck]
for animal in animal_list:
    animal().say()

所有的类和对象都实现的同一个办法,这个办法名一样,这些类就能够归类为一种类型
在 Python 中实现多态,只须要实现一样的办法

例子 2

name_list1 = ['zjx1', 'zjx2']
name_list2 = ['zjx3', 'zjx4']
name_tuple = ('zzz1', 'zzz2')
name_set = set()
name_set.add('jjj1')
name_set.add('jjj2')
name_list1.extend(name_list2)
print(name_list1)  # >>> ['zjx1', 'zjx2', 'zjx3', 'zjx4']

name_list1.extend(name_list2)语句能够将 name_list2 中的元素增加到 name_list1 中

查看 extend 源码 (此处为 3.7,不同版本会有差别),源码中的正文为: 通过附加可迭代对象中的元素来扩大列表。
因而该办法中的参数为任何可迭代的对象都是能够的

def extend(self, *args, **kwargs): # real signature unknown
 """Extend list by appending elements from the iterable."""
 pass
name_list1.extend(name_tuple)
print(name_list1)   # >>> ['zjx1', 'zjx2', 'zzz1', 'zzz2']

name_list1.extend(name_set)
print(name_list1)   # >>> ['zjx1', 'zjx2', 'jjj1', 'jjj2'~~ ~~]
正文完
 0