Python类中部分默认函数的调用

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,自定义的对象如果没有迭代器 iternext 迭代器协议,使用[]运算符取对象列表或者字典中的值时,会自动调用它的 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']

发表评论

邮箱地址不会被公开。 必填项已用*标注