多态和鸭子类型

多态:一个类型表现出来的多种状态,实际上是通过继承来完成的
既一个类实例化出来的不同对象是这个类表现出来的不同形态

而在java中:一个参数必须定制类型,所以如果想让两个类型的对象都可以传递,那么必须让这两个类继承自一个父类,在制定类型的时候使用父类来声明

鸭子类型:一个类可以是很多类的鸭子类型,既一个类不需要依靠继承其它的类来判断它是否属于其它的类

  例如一个元组类是可迭代的,但是它并没有依靠继承可迭代类来判断自己是否是可迭代的

  例如通过调用len函数查询某个内部实现了__len__方法的类的对象的某个数据类型的长度时,其对象可以说是鸭子类型

class List(object):  # 在这里模拟一下list类的部分实现原理
    def __init__(self):
        self.ls = []

    def append(self, n):
        self.ls.append(n)

    def __len__(self):  # 在类的内部实现一个__len__方法
        return len(self.ls)


lst = List()  # 实例化一个列表对象
lst.append(4)  # 调用append方法增加元素4
lst.append('hhh')


def len(obj):   # 在外部定义一个len方法
    return obj.__len__()

ret = len(lst)
print(ret)
原文地址:https://www.cnblogs.com/GOD-L/p/13537433.html