首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中len函数的鲁棒性与多态性

python中len函数的鲁棒性与多态性
EN

Stack Overflow用户
提问于 2015-08-27 15:43:45
回答 2查看 175关注 0票数 0

len方法是如此健壮,以至于它可以处理许多数据,structures.Following是它工作得很好的一些数据结构。

代码语言:javascript
运行
复制
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__方法,该方法具有如何查找长度的所有实现。

代码语言:javascript
运行
复制
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函数是否使用了多态性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-27 15:52:45

更好的术语是“鸭子类型”;传递给len的对象类型并不重要,只要它实现了__len__方法。使用新的样式类,这可以看作是多态的结果,因为所有类型都是object的子类(尽管object本身没有定义__len__,但您可以假装它是一个没有默认实现的抽象方法,但这将这个类推扩展得有点薄)。但是,只要len实现了__len__,它们仍然可以处理Python2的旧样式类的实例。

票数 1
EN

Stack Overflow用户

发布于 2015-08-27 15:51:52

我想说的是,多态是被启用的,而不是被__len__的各种实现所利用。Python风格的多态性是基于接口的概念。多态代码以接口为目标。使用len(x)的代码将处理提供__len__实现的类中的任何对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32253923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档