python 类中为什么要用:__len__() 方法

python 类中为什么要用:len() 方法




__len__() 的作用是返回容器中元素的个数,要想使 len() 函数成功执行,必须要在类中定义 __len__()。而 len() 的执行指的是在命令窗口输入 len(),而在程序中一般情况下即使不定义 __len__() 也能成功执行。主要看在命令窗口的行为,看输入是 len(对象) 还是 len(对象.属性)
使用 len(function) 时,实际上调用的就是 object.__len__ 方法。

  • 案例1:
class CountList(object):
	def __init__(self, *args):
		self.values = [x for x in args]
		self.values2 = [x for x in args] * 2

	def __len__(self):
		return len(self.values)


c1 = CountList(1, 2, 3, 4, 5)
>>> len(c1)
> 5
>>> len(c1.values2)
> 10

以上程序的类中定义了 __len__() 函数,*args 时可变长度的参数,它接收到数据后打包成元组,再利用 for 循环将数据传递给列表。当在命令窗口写入 len(c1) 时,由于定义的 __len__() 的返回值时返回具体的实例对象的列表长度,所以在命令窗口直接输入 len(c1) 就可以输出列表的长度,而类中封装的 len() 函数直接决定了返回的到底是哪个属性的长度,我们一般将其定义为实例化中元素的个数

  • 案例2:
class CountList(object):
	def __init__(self, *args):
		self.values = [x for x in args]
		self.values2 = [x for x in args] * 2


c1 = CountList(1, 2, 3, 4, 5)
>>> len(c1)
> Traceback (most recent call last):
	TypeError: object of type 'CountList' has no len()
>>> len(c1.values)
> 5
>>> len(c1.values2)
> 10

如果没有定义 __len__(),那再命令窗口输入 len(c1) 会提示出错。
对于类而言,len() 函数没有办法直接计算类的长度,因为在类中包含着众多的属性以及方法,len() 函数不知道应该计算哪一个,如果在类中没有定义 __len__() 方法来指明程序到底该计算哪个属性的长度时,在终端我们必须采用 len(对象.属性) 才能得到我们想要的结果

但是就封装性而言,还是定义 __len__() 比较好,因为用户无需知道具体的属性是什么,只需要一个实例化的对象即可。

参考资料

  1. python的__len__()方法-Legolas~-CSDN

猜你喜欢

转载自blog.csdn.net/weixin_51524504/article/details/129985454