1. call
例类Run中展示call的使用方法,call接收对象传入的参数,可在call方法里执行某一特定对象的参数和方法(pytorch中模型正向传播的forward应该是对该函数的重写):
1 2 3 4 5 6 7 |
class Run(): def __init__(self,a): print('这是a:',a) def __call__(self, *args, **kwargs): print("这是call里的其他参数",args) test=Run(123) test('hehe') |
输出:
1 2 |
这是a: 123 这是call里的其他参数: ('hehe',) |
2. getitem
例类Tag,自定义的对象如果没有迭代器 iter 、next 迭代器协议,使用[]运算符取对象列表或者字典中的值时,会自动调用它的 getitem 方法;可重定义此方法,使对象通过类似列表或者字典的调用方式实现迭代取值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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 3 4 5 6 7 8 9 10 |
[] 这是1 这个方法被调用 这是2 这个方法被调用 这是9 这个方法被调用 这是4 这个方法被调用 ['这是0','这是1','这是2','这是3','这是4','这是5','这是6','这是7','这是8','这是9','这是10','这是11'] |
微信赞赏
支付宝赞赏