python中,在类中加入__call__() 方法,那么这个类的实例便可以当作一个方法来调用。
我们举一个pytorch中的例子:
下图是torchvision.transforms 中的一个类,用于将PIL Image或numpy.ndarray转化为tensor;其中,它实现了一个__call__(self,pic)方法,并返回F.to_tensor(pic)。
这样,我们便可以将这个类当做方法来使用,如下图
这里,我们先用PIL的Image.open() 方法读取一张图片,然后用ToTensor()将其转化为tensor。注意,我们这里成功地将一个类当做函数来调用,上图后一句话等价于:
func = transforms.ToTensor()
img = func(img)
其实,它还等价于
img = transforms.ToTensor().__call__(img)
那么这个有什么用呢?我认为,一个优点是,类远比函数功能强大和具有灵活性,所以如果你有这两方面的需求,那么考虑使用__call__()方法吧!