1. call
例类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')
输出:
这是a: 123
这是call里的其他参数: ('hehe',)
2. getitem
例类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)
输出:
[]
这是1
这个方法被调用
这是2
这个方法被调用
这是9
这个方法被调用
这是4
这个方法被调用
['这是0','这是1','这是2','这是3','这是4','这是5','这是6','这是7','这是8','这是9','这是10','这是11']