You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何实现调用时动态添加类方法、不存在方法调用不报错

Python动态捕获不存在的方法调用实现方案

这种需求完全可以实现,核心是用Python自带的魔术方法__getattr__:当类的实例访问不存在的属性/方法时,会自动触发__getattr__方法,方法的入参就是你调用的不存在的属性名/方法名。

基础实现(匹配你给出的示例效果)

class Foo:
    def __getattr__(self, method_name):
        # 返回一个可调用对象,处理方法调用的逻辑
        def logic_wrapper(*args, **kwargs):
            # 这里写你的自定义后续逻辑,示例直接返回方法名字符串
            return method_name
        return logic_wrapper

# 测试效果
a = Foo()
print(a.bar()) # 输出 bar
print(a.foo()) # 输出 foo

扩展用法(支持接收调用时传入的参数)

如果调用不存在的方法时需要传入参数,可以直接在logic_wrapper里接收处理:

class Foo:
    def __getattr__(self, method_name):
        def logic_wrapper(*args, **kwargs):
            # 示例:打印调用信息后返回计算结果
            print(f"调用方法:{method_name},位置参数:{args},关键字参数:{kwargs}")
            if method_name == "sum":
                return sum(args)
            return method_name
        return logic_wrapper

# 测试
a = Foo()
print(a.sum(1,2,3,4)) # 先打印调用信息,再输出10
print(a.hello(name="张三")) # 先打印调用信息,再输出hello

注意事项

  • 不要混淆__getattr__和__getattribute__:前者仅在访问不存在的属性时触发,完全符合你的需求;后者会拦截所有属性访问,重写不当很容易触发无限递归,没有特殊需求不要使用。
  • 如果需要动态添加的方法是固定的,也可以提前用setattr给实例/类绑定方法,但你需要的是调用时动态捕获任意不存在的方法,用__getattr__是最简洁的方案。

内容的提问来源于stack exchange,提问作者Bas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:45:08