本文实例讲述了Python中__call__的用法,分享给大家供大家参考之用。具体方法如下:
先来看看如下示例代码:
1 2 3 4 5 6 7 8 9 10 | #call.py 一个class被载入的情况下。 class Next : List = [] def __init__( self ,low,high) : for Num in range (low,high) : self . List .append(Num * * 2 ) def __call__( self ,Nu): return self . List [Nu] |
如果 这样使用:
1 2 3 | b = Next ( 1 , 7 ) print b. List print b( 2 ) |
那么回馈很正常:
1 2 | [ 1 , 4 , 9 , 16 , 25 , 36 ] 9 |
但如果这样使用:
1 2 3 4 5 6 7 8 9 10 11 | b = Next b( 1 , 7 ) print b. List print b( 2 ) $python . / call.py [ 1 , 4 , 9 , 16 , 25 , 36 ] Traceback (most recent call last): File "cal.py" , line 17 , in <module> print b( 2 ) TypeError: __init__() takes exactly 3 arguments ( 2 given) |
__init__是初始化函数,在生成类的实例时执行。
而__call__是模拟()的调用,需要在实例上应用,因此这个实例自然是已经执行过__init__了。
你所举的后面那个例子:
1 | b = Next |
这并不是创建实例,而是将class赋给一个变量。因此后面使用b进行的操作都是对Next类的操作,那么其实就是:
1 2 3 | Next ( 1 , 7 ) print Next . List print Next ( 2 ) |