因为我要在封装的类或者方法(函数)的基础上进行修改,所以继承然后重写覆盖不能满足我的要求,所以我采用最复杂也是最简单当方式来做
1.找到原始类或者函数,将其复制到我的代码里面
2.进行修改
3.调用复制到自己代码中的类或者方法,而不是调用库里面的
下面解决几个可能遇到的问题
1.如何找到原始函数?
在pycharm中Ctrl + 鼠标左键 就可以快速进入函数内部
但是不少小伙伴是在服务器上跑的,或者由于各种原因无法使用上面的快捷方式
可以使用以下函数将函数打印出来
import torch.nn.functional as F
import inspect
source_code=inspect.getsource(F.multi_head_attention_forward)
print(module_source_code)
#print(MyClass)
#类也是一样的
2.调用调整好的类或者方法
调用和一般的调用没什么区别
def aMethod():
print("我已经成功调用这个函数了")
class MyClass:
def __init__(self, value):
self.value = value
def forward(self):
print("print(value*2)")
print(self.value*2)
aMethod()
myclass=MyClass(11)
myclass.forward()
或者
class MyClass:
def __init__(self, value):
self.value = value
def aMethod(self):
print("我已经成功调用这个函数了")
def forward(self):
print("print(value*2)")
print(self.value*2)
self.aMethod()
myclass=MyClass(11)
myclass.forward()