python的__len__()方法
初学__len__()的时候始终不明白为什么要定义__len__(),甚至觉得类中有没有__len__()都无所谓,有的时候len()仍然能正常执行。但是经过几次尝试终于明白有的时候为什么要定义__len__()。首先__len__()的作用是返回容器中元素的个数,要想使len()函数成功执行,必须要在类中定义__len__()。而len()的执行指的是在命令窗口输入len(),而在程序中一般情况
初学__len__()
的时候始终不明白为什么要定义__len__()
,甚至觉得类中有没有__len__()
都无所谓,有的时候len()
仍然能正常执行。但是经过几次尝试终于明白有的时候为什么要定义__len__()
。首先__len__()
的作用是返回容器中元素的个数,要想使len()
函数成功执行,必须要在类中定义__len__()
。而len()
的执行指的是在命令窗口输入len()
,而在程序中一般情况下即使不定义__len__()
程序中的len()函数也能成功执行。个人认为其实二者并没有多大差别,主要还是看在命令窗口的行为,你是输入的是len(对象)还是len(对象.属性)。
以上程序的类中定义了__len__()
函数,*args
是可变长度的参数,它接收到数据后打包成元组,再利用for循环将数据传递给列表。当在命令窗口写入len(c1)
时,由于定义的__len__()
的返回值是返回具体的实例对象的列表长度,所以在命令窗口直接输入len(c1)
就可以输出列表的长度。
如果没有定义__len__()
,那在命令窗口输入len(c1)
会提示出错,显然错误原因是因为CountList
类中并没有len()
的定义。因为len()
必须接收一个具体的实例化对象的属性,如果改成len(c1.values)
也能成功执行!
对于类而言,len()
函数是没有办法直接计算类的长度的,因为在类中包含着众多的属性以及方法,是一种抽象的实体。如果在类中没有定义__len__()
方法来指明程序到底该计算哪个属性的长度时,在终端我们必须采用len(对象.属性)才能得到我们想要的结果。如果终端直接采用len(对象)的方法,显然程序会报错,提示类并没有len()
方法。类不同于字符串、元组、列表、字典等数据类型,对于后者,它们是实实在在能通过len()
方法直接计算出长度,是具体的实体。
但是就封装性而言,还是定义__len__()
比较好,因为用户无需知道具体的属性是什么,只需要一个实例化对象即可。如果属性是私有的,那么无疑定义__len__()
是最好的办法。
更多推荐
所有评论(0)