所以列表对象没有简单的长度属性len
,而是#34;魔法" __len__()
。为什么首选在列表而不是其属性上使用函数len()
?函数len()
不仅仅是查询__len__()
吗?为什么绕道而没有my_list.len()
?
答案 0 :(得分:5)
将__len__
视为可以为任何对象自定义的方法可能会有所帮助。 len
函数与使用.__len__()
或.len()
的部分原因是python旨在成为一种教授初学者的语言。对于初学程序员来说,理解使用length函数来获取列表的长度似乎非常直观。
例如:
class MyObject:
def __len__(self):
return 100
a = MyObject()
assert len(a) == 100
所以它只是所有python对象的构造,你可以设置如何计算长度。这个例子并不实用,但是如果你有一个Circle对象,你可能希望长度为它的周长,即
class Circle:
def __init__(self, radius):
self.radius = radius
def __len__(self):
return 3.14 * self.radius * 2
将len
作为函数和方法的好处是能够将filter-reduce-reduce len转换为数组。写起来很容易:
map(len, [[1,2], [4,5,6]])
但是,如果你真的认为.len()
是一种呈现对象长度的有吸引力的方法,你可以添加一个方法。
class MyObject:
def __len__(self):
return 10
def len(self):
return len(self)