如何为尚未创建的对象存储方法调用?
为未创建对象预存方法调用的解决方案
针对你提出的需求——预存第三方类实例的方法调用(对象创建前就指定方法和参数),以下是几种原生/轻量的实现方式,无需修改目标类代码:
1. 使用标准库operator.methodcaller(推荐)
operator.methodcaller是专门为这类场景设计的工具:它先存储方法名称和调用参数,等传入对象后,再自动绑定对象并执行对应方法。
from operator import methodcaller # 预存调用逻辑:指定方法名和参数 deferred_call = methodcaller("target_method", 100, flag=True, msg="hello") # 后续创建第三方类实例 obj = ThirdPartyClass() # 执行预存的方法调用 result = deferred_call(obj)
2. Lambda表达式快速封装
如果不想引入额外模块,用lambda可以快速实现同样的效果,语法简洁直接:
# 预存调用:接收obj参数,调用其方法并传入预设参数 deferred_call = lambda obj: obj.target_method(100, flag=True, msg="hello") # 创建对象后执行 obj = ThirdPartyClass() result = deferred_call(obj)
3. 自定义封装类(适合复杂场景)
如果需要更清晰的结构或扩展功能(比如记录调用信息),可以自己写一个轻量类来封装:
class DeferredMethod: def __init__(self, method_name, *args, **kwargs): self.method_name = method_name self.args = args self.kwargs = kwargs def __call__(self, obj): # 通过getattr获取对象的方法,避免硬编码 target_method = getattr(obj, self.method_name) return target_method(*self.args, **self.kwargs) # 预存调用 deferred_call = DeferredMethod("target_method", 100, flag=True, msg="hello") # 创建对象后执行 obj = ThirdPartyClass() result = deferred_call(obj)
以上三种方式都完全满足你的需求:对象创建前定义调用逻辑,创建后执行,且不需要修改第三方类的任何代码。其中operator.methodcaller是最简洁的原生方案,推荐优先使用。
内容的提问来源于stack exchange,提问作者o c
相关产品推荐
相关产品推荐

