【发布时间】:2018-04-19 20:46:56
【问题描述】:
所以列表对象没有简单的长度属性len,而是“神奇”__len__()。为什么更喜欢在列表上使用函数len() 而不是它的属性?函数len()不是简单查询__len__()吗?为什么绕道而没有my_list.len()?
【问题讨论】:
标签: python
所以列表对象没有简单的长度属性len,而是“神奇”__len__()。为什么更喜欢在列表上使用函数len() 而不是它的属性?函数len()不是简单查询__len__()吗?为什么绕道而没有my_list.len()?
【问题讨论】:
标签: python
将__len__ 视为可以为任何对象自定义的方法可能会有所帮助。使用len 函数与使用.__len__() 或.len() 的部分原因是python 旨在成为一种易于学习的语言。对于初学者来说,理解你使用 length 函数来获取列表的长度对我来说似乎很直观。
例如:
class MyObject:
def __len__(self):
return 100
a = MyObject()
assert len(a) == 100
所以它只是所有 python 对象的构造,您可以设置如何计算长度。这个例子没有用,但是如果你有一个 Circle 对象,你可能希望长度是它的 Circumference,即。
class Circle:
def __init__(self, radius):
self.radius = radius
def __len__(self):
return 3.14 * self.radius * 2
将len 作为函数和方法的一个好处是能够将 len 映射到数组。很容易写:
map(len, [[1, 2], [4, 5, 6]])
但是,如果您真的认为.len() 是一种有吸引力的方式来表示对象的长度,您可以添加一个方法。
class MyObject:
def __len__(self):
return 10
def len(self):
return len(self)
【讨论】: