例类Run中展示call的使用方法,call接收对象传入的参数,可在__call__方法里执行某一特定对象的参数和方法(pytorch中模型正向传播的forward应该是对该函数的重写):
class Run():
def __init__(self,a):
print('这是a:',a)
def __call__(self, *args, **kwargs):
print("这是call里的其他参数",args)
test=Run(123)
test('hehe')
输出:

例类Tag,自定义的对象如果没有迭代器__iter__ 、__next__ 迭代器协议,使用[]运算符取对象列表或者字典中的值时,会自动调用它的__getitem__方法;可重定义此方法,使对象通过类似列表或者字典的调用方式实现迭代取值:

 

class Tag:
def __init__(self,id):
self.list=[]
self.id=id
def __getitem__(self, item):
self.list=[]
for i in range(self.id):
self.list.append('这是'+str(i))
print('这个方法被调用')
return self.list[item]

a=Tag(12)
print(a.list)
print(a[1])
print(a[2])
print(a[9])
print(a[4])
print(a.list)
输出:

 

posted on 2021-09-27 17:11  BKSW  阅读(306)  评论(0编辑  收藏  举报