python特殊函数,__str__(),__repr__(),__call__(),__getitem__(),__len__()

由于看别人代码,看到几个特殊的函数;然后就到网上查阅了资料,特此写下来做个笔记!

 

一、__str__(),__repr__(),__call__()将这三个函数放到一起做比较:

先看如下代码,以遍更好的理解三个函数的功能:

python特殊函数,__str__(),__repr__(),__call__(),__getitem__(),__len__()

类A中没有定义任何函数,打印a会显示其在内存中的位置,如何把实例a当做函数用,则会报错;

下面,看看定义了三种函数时,同样的操作会输出什么:

python特殊函数,__str__(),__repr__(),__call__(),__getitem__(),__len__()

可以发现,把实例当做函数调用会调用内部的__call__()函数,在终端直接输入实例,会调用__repr__()函数

,而打印实例,则会调用__str__()函数;

同时,如果只定义了__repr__()函数,而没用定义__str__()函数,在终端输入实例,或者直接打印实例,都会调用__repr__()函数,反之则不然;通过如下代码验证:

python特殊函数,__str__(),__repr__(),__call__(),__getitem__(),__len__()  python特殊函数,__str__(),__repr__(),__call__(),__getitem__(),__len__()

据网上资料显示,产生上述结果是因为在内部__str__()函数调用了__repr__()函数。

 

二 、__getitem__()与__len__()放一起对比:

这两个函数可以让实例表现的像个列表一样,可以进行迭代,前一个可以输出实例中的某些特定的元素,后一个可以输出特定元素的长度,通过下面的实例会增强理解;

python特殊函数,__str__(),__repr__(),__call__(),__getitem__(),__len__()

 

 

 

参考资料:

1.https://blog.csdn.net/sinat_41104353/article/details/79254149

2.https://www.cnblogs.com/superxuezhazha/p/5792199.html

3.https://www.cnblogs.com/raind/p/10099521.html