用Python实现自定义可调用对象
更新时间:2023-11-12Python自定义可调用对象的实现
Python中,可调用对象是指可以像函数一样进行调用的任何对象。比如函数、类以及实现了 __call__ 方法的对象。要实现可调用对象,需要对类进行修饰或者实现 __call__ 方法。
实现可调用对象的修饰器
实现可调用对象的修饰器
可通过修饰器将类转化为可以进行函数式调用的可调用对象,修饰器可以接受一个类作为参数并返回一个新的可调用对象,这个新的类可以像函数一样进行调用。
class MyCallable: def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print("Calling:", self.func.__name__) return self.func(*args, **kwargs) @MyCallable def add(a, b): return a + b add(1, 2)该代码将输出 "Calling: add",并返回3.这里定义了一个MyCallable修饰器,这个修饰器接受一个类作为参数,重写了这个类的 __call__ 方法,将实例化后的类变成可调用对象,这个可调用对象可以像函数一样进行调用。
使用 __call__ 方法实现可调用对象
除了用修饰器实现可调用对象外,还可以通过在类中实现 __call__ 方法来实现可调用对象。
class MyCallable: def __call__(self, *args, **kwargs): print(sum(args)) my_obj = MyCallable() my_obj(1, 2, 3, 4)该代码将输出10,这里定义了一个类MyCallable,并在类中实现了 __call__ 方法。在类实例化后,可以像函数一样进行调用。
使用可调用对象进行函数参数传递
由于可调用对象可以像函数一样进行调用,因此可作为函数的参数进行传递。
class MyCallable: def __call__(self, a, b): print(a + b) def caller(func): func(2, 3) my_obj = MyCallable() caller(my_obj)该代码将输出5,这里定义了一个类MyCallable以及一个caller函数,在caller函数中传递可调用对象,这个可调用对象中实现了 __call__ 方法,用于对传递的参数进行运算。
总结
Python中,可调用对象是指可以像函数一样进行调用的任何对象。可以通过修饰器或重写 __call__ 方法来实现可调用对象。可调用对象可以像函数一样进行调用,并且可以作为函数的参数进行传递。这种特性在实现一些高级特性和框架中非常有用。