使用背景
一般情况下类方法的调用是通过先创建类对象再通过a.b()的方式来调用,但是如果类中只有一个方法或者一个方法的使用频率非常高,那么就可以为这个方法命名为__call__来简化调用。
call
存在__call__方法的类对象被称为可调用对象,它的作用可以总结为以下两点:
- 简化了对象下方法的调用 (当某方法调用频率很高)
- 模糊了对象和函数调用时的区别 (提高了代码的兼容性)
示例1
# 使用__call__前
class A():def m(self):print('a')def n(self):print('b')a = A()
a.m()
# 使用__call__后
class A():def __call__(self):print('a')def n(self):print('b')a = A()
a()
示例2
调用函数
def my_function(x, y):return x + yresult = my_function(3, 4)
print(result) # 输出结果为 7
调用类方法
class MyClass:def my_method(self, x):return x * 2obj = MyClass()
result = obj.my_method(3)
print(result) # 输出结果为 6
调用类实例(如果类实现了__call__方法):
class MyCallableClass:def __call__(self, x):return x ** 2obj = MyCallableClass()
result = obj(4)
print(result) # 输出结果为 16