python特殊函数,__str__(),__repr__(),__call__(),__getitem__(),__len__()
由于看别人代码,看到几个特殊的函数;然后就到网上查阅了资料,特此写下来做个笔记!
一、__str__(),__repr__(),__call__()将这三个函数放到一起做比较:
先看如下代码,以遍更好的理解三个函数的功能:
类A中没有定义任何函数,打印a会显示其在内存中的位置,如何把实例a当做函数用,则会报错;
下面,看看定义了三种函数时,同样的操作会输出什么:
可以发现,把实例当做函数调用会调用内部的__call__()函数,在终端直接输入实例,会调用__repr__()函数
,而打印实例,则会调用__str__()函数;
同时,如果只定义了__repr__()函数,而没用定义__str__()函数,在终端输入实例,或者直接打印实例,都会调用__repr__()函数,反之则不然;通过如下代码验证:
据网上资料显示,产生上述结果是因为在内部__str__()函数调用了__repr__()函数。
二 、__getitem__()与__len__()放一起对比:
这两个函数可以让实例表现的像个列表一样,可以进行迭代,前一个可以输出实例中的某些特定的元素,后一个可以输出特定元素的长度,通过下面的实例会增强理解;
参考资料:
1.https://blog.csdn.net/sinat_41104353/article/details/79254149