len方法是如此健壮,以至于它可以处理许多数据,structures.Following是它工作得很好的一些数据结构。
import numpy as np
list1=[1,2,3,4]
dict1={"a":1,"b":2,"c":3,"d":4}
npArray1=np.zeros(4)
print("length of list is:",len(list1))
print("length of list is:",len(dict1))
print("length of list is:",len(npArray1))
('length of list is:', 4)
('length of list is:', 4)
('length of list is:', 4)然后,我发现实际上len方法调用了数据结构的__len__方法,该方法具有如何查找长度的所有实现。
print("length of list is:",list1.__len__())
print("length of list is:",dict1.__len__())
print("length of list is:",npArray1.__len__())
('length of list is:', 4)
('length of list is:', 4)
('length of list is:', 4)我的问题是,在这些数据结构上,len函数是否使用了多态性?
发布于 2015-08-27 15:52:45
更好的术语是“鸭子类型”;传递给len的对象类型并不重要,只要它实现了__len__方法。使用新的样式类,这可以看作是多态的结果,因为所有类型都是object的子类(尽管object本身没有定义__len__,但您可以假装它是一个没有默认实现的抽象方法,但这将这个类推扩展得有点薄)。但是,只要len实现了__len__,它们仍然可以处理Python2的旧样式类的实例。
发布于 2015-08-27 15:51:52
我想说的是,多态是被启用的,而不是被__len__的各种实现所利用。Python风格的多态性是基于接口的概念。多态代码以接口为目标。使用len(x)的代码将处理提供__len__实现的类中的任何对象。
https://stackoverflow.com/questions/32253923
复制相似问题