【问题标题】:'What is magic about __len__()?'__len__() 有什么魔力?
【发布时间】:2018-04-19 20:46:56
【问题描述】:

所以列表对象没有简单的长度属性len,而是“神奇”__len__()。为什么更喜欢在列表上使用函数len() 而不是它的属性?函数len()不是简单查询__len__()吗?为什么绕道而没有my_list.len()

【问题讨论】:

标签: python


【解决方案1】:

__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)

【讨论】:

  • 谢谢你,罗伯。当场,这真的很有帮助!
猜你喜欢
  • 2023-03-29
  • 2016-09-23
  • 1970-01-01
  • 2015-09-09
  • 2013-08-08
  • 2013-03-13
  • 2013-11-05
  • 1970-01-01
相关资源
最近更新 更多