前言:
今天我使用类的__call__方法,模拟了多位专家在一个签名簿上留言并签名的过程。
(1)签名簿是一个字符串变量 input;
(2)签名过程是一个自定义方法 forward();
(3)签名动作就是向 input 中追加留言和名字。
签名结束后,输出签名簿。
通过上面的模拟实验,可以帮助我们理解Pytorch框架中tensor流转加工的过程。希望这个小小的模拟实验,能够对您的学习带来一些帮助。
代码:
'''
使用类的__call__方法,模拟了多位专家在一个签名簿上留言并签名的过程。
(1)签名簿是一个字符串变量 input;
(2)签名过程是一个自定义方法 forward();
(3)签名动作就是向 input 中追加留言和名字。
签名结束后,输出签名簿。
通过上面的模拟任务,可以帮助我们理解Pytorch框架中tensor流转加工的过程。
'''
class person:
def __init__(self,name):
self.name=name
def __call__(self,input,txt):
return self.forward(input,txt)
def forward(self,input,txt):
input=input+f'\n\n{txt}\n专家:{self.name}\n'+'-'*20
return input
if __name__ =='__main__':
#空白签名簿
input = ''
#签名
p1 = person('张三')
input = p1(input,'开门笑迎八方来客,抬头喜纳四海财源')
p2 = person('李四')
input = p2(input,'鹏程似锦,千端称意,新业兴旺,万事顺心')
p3 = person('王五')
input = p3(input,'祝火红的事业财源广进,温馨的祝愿繁荣昌隆')
#输出
print('input = \n',input)
结果截图:
总结:
类的__call__方法是一个私有的名字固定的特殊方法。它让类的对象能够像函数一样接收输入和返回结果。
例如:在语句p1 = person('张三') 中,定义了对象p1;在语句 input = p1(input,'开门笑迎八方来客,抬头喜纳四海财源')中,对象p1接收了两个实参,并返回一个结果 input。
对象p1接收的两个实参,传给了__call__方法,__call__方法又传递给了forward()方法,forward()方法处理后,把结果回传给了__call__方法,__call__方法把结果回传给了对象p1。
p1处理后的结果,转交p2继续处理,p2处理后的结果转交p3继续处理。这个过程类似Pytorch框架中tensor流转加工的过程。