《Python 可调用对象揭秘:让你的类像函数一样灵活》
一、引言:函数?对象?还是两者兼具?
在 Python 的世界里,函数是第一类对象(first-class citizen),这意味着它们可以被赋值、传递、存储,甚至作为返回值。而更有趣的是,类的实例也可以像函数一样被调用——只要你愿意赋予它这样的能力。
这篇文章将带你深入探索 Python 中的“可调用对象”机制,揭示背后的魔法方法 __call__,并通过实战案例展示它在日志记录、装饰器、状态追踪等场景中的强大应用。
二、背景介绍:Python 的灵活性与统一性
Python 自 1991 年由 Guido van Rossum 发布以来,始终秉持“简洁优雅”的设计哲学。它打破了传统语言中函数与对象的界限,允许开发者以统一的方式处理各种行为。
这种灵活性让 Python 成为 Web 开发、数据科学、自动化、人工智能等领域的首选语言,也催生了大量创新性的编程模式。
在这个背景下,“让对象像函数一样工作”不仅是语法上的可能,更是设计上的利器。
三、基础知识:什么是可调用对象?
在 Python 中,任何实现了 __call__ 方法的对象都可以被调用:
class MyCallable:
def __call__(self):
print("我被调用了!")
obj = MyCallable()
obj() # 输出:我被调用了!
这段代码展示了一个类的实例如何“伪装”成函数。调用 obj() 实际上触发的是 obj.__call__()。
判断对象是否可调用:
print(callable(obj)) # True
print(callable(42)) # False
四、实战案例:记录函数调用次数的“对象函数”
我们来构建一个类,其实例可以像函数一样被调用,并记录调用次数。
示例代码:
class CallCounter:
def __init__(self, func):
self.func = func
self.count = 0
def __call__(self

最低0.47元/天 解锁文章
377

被折叠的 条评论
为什么被折叠?



