在Python的class中有一些函数往往具有特殊的意义。__init__()
和__call__()
就是class很有用的两类特殊的函数。
__init__()
在Python中,__init__()
函数的意义等同于类的构造器(同理,__del__()
等同于类的析构函数)。因此,__init__()
方法的作用是创建一个类的实例。
__call__()
Python中的函数是一级对象。这意味着Python中的函数的引用可以作为输入传递到其他的函数/方法中,并在其中被执行。
而Python中类的实例(对象)可以被当做函数对待。也就是说,我们可以将它们作为输入传递到其他的函数/方法中并调用他们,正如我们调用一个正常的函数那样。而类中__call__()
函数的意义正在于此。为了将一个类实例当做函数调用,我们需要在类中实现__call__()
方法。也就是我们要在类中实现如下方法:def call(self, *args)。这个方法接受一定数量的变量作为输入。
假设x是X类的一个实例。那么调用x.__call__(1,2)
等同于调用x(1,2)
。这个实例本身在这里相当于一个函数。
总结
那么,__init__()
和__call__()
的区别如下:
__init__()
的作用是初始化某个类的一个实例。__call__()
的作用是使实例能够像函数一样被调用,同时不影响实例本身的生命周期(__call__()
不影响一个实例的构造和析构)。但是__call__()
可以用来改变实例的内部成员的值。
class X(object):
def __init__(self, a, b, range):
self.a = a
self.b = b
self.range = range
def __call__(self, a, b):
self.a = a
self.b = b
print('__call__ with ({}, {})'.format(self.a, self.b))
def __del__(self, a, b, range):
del self.a
del self.b
del self.range
>>xInstance = X(1, 2, 3)
>>xInstance(1,2)
__call__ with (1, 2)
作者:耀凯考前突击大师
来源:CSDN
原文:https://blog.csdn.net/yaokai_assultmaster/article/details/70256621
版权声明:本文为博主原创文章,转载请附上博文链接!