这篇博客写给python小白。
其实很简单,对象名后面加(),代表调用类里的__call__函数;对象名后面加[],代表调用类里的__getitem__或者__setitem__函数(具体取决于使用[]时是读取还是写入)。简单举个例子:
这里有一个类Poke,在类里有个变量number,另外还有上述的三个函数:
class Poke:
def __init__(self):
self.number = 0
def __call__(self, *args, **kwargs):
print("zzm")
def __getitem__(self, item): # item就是[]内的值
return self.number
def __setitem__(self, key, value): # key是[]内的值,value是 = 后的值
self.number = value
然后我建立Poke的对象poke,我想使用poke()和poke[i]:
poke = Poke() # 创建对象poke
poke() # 调用__call__函数
print(poke[0]) # 调用__getitem__函数
poke[0] = 3 # 调用__setitem__函数
print(poke[0]) # 调用__getitem__函数
那么输出为:
zzm # __call__函数的输出
0 # __getitem__函数的返回值,因为self.number初始值为0,所以输出也为0
3 # __setitem__函数将self.number的值赋成了3,所以输出变成了3
想在对象名后面使用()和[],上述三个函数是必不可少的,缺少的话就会报错,导致无法运行程序。
当然函数参数中的变量不限于数字,使用其他类型的值也是可以的,比如字符串等。