类实例化成对象时,首先应该是调用类中的__call__函数,在__call__函数中先用__new__方法为对象分配内存空间,然后再在__call__函数中调用__init__方法初始化对象。如果这么理解没错的话,是否可以自己来实现类中的__call__函数,达到覆盖默认函数的目的呢?
但是我在网上看到这段说明以及相关代码的运行结果,觉得不理解,恳请指点!
代码定义了 Foo 类,但又为 Foo 定义了一个 __call__方法,
资料上说这时 Foo(*args, **kwargs) 实例化对象时并不等于 Foo.__call__(*args, **kwargs):
>>> class Foo:
... def __call__(self):
... print('running __call__')
...
>>> Foo()
<__main__.Foo object at 0x000000000227ABE0>
>>> Foo.__call__()
Traceback (most recent call last):
File "", line 1, in
TypeError: __call__() missing 1 required positional argument: 'self'
In this case, __call__ is used to call instances of the class :
>>> Foo()()
running __call__
但是我在网上看到这段说明以及相关代码的运行结果,觉得不理解,恳请指点!
代码定义了 Foo 类,但又为 Foo 定义了一个 __call__方法,
资料上说这时 Foo(*args, **kwargs) 实例化对象时并不等于 Foo.__call__(*args, **kwargs):
>>> class Foo:
... def __call__(self):
... print('running __call__')
...
>>> Foo()
<__main__.Foo object at 0x000000000227ABE0>
>>> Foo.__call__()
Traceback (most recent call last):
File "", line 1, in
TypeError: __call__() missing 1 required positional argument: 'self'
In this case, __call__ is used to call instances of the class :
>>> Foo()()
running __call__