You need to enable JavaScript to run this app. Python能否实现类实例任意调用都指向指定的默认函数?
优惠活动
大模型
产品
解决方案
定价
更多

Python能否实现类实例任意调用都指向指定的默认函数?

实现方案

可以实现,核心用到Python的两个魔术方法__getattribute__和__call__即可覆盖所有属性访问、方法调用场景,同时支持无限链式调用。

完整实现代码

class Example:
    def __init__(self):
        self.parameter1 = 1
    
    def standardFunction(self):
        print("Hello")
    
    # 所有属性访问都会触发该方法
    def __getattribute__(self, name):
        # 调用默认逻辑,用super避免无限递归
        super().__getattribute__("standardFunction")()
        # 返回自身支持后续链式操作
        return self
    
    # 实例被当作函数调用时触发该方法
    def __call__(self, *args, **kwargs):
        super().__getattribute__("standardFunction")()
        return self

效果验证

你提到的所有调用场景都可以正常触发输出:

ex1 = Example()
ex1.test1() # 输出Hello
ex1.test2 # 输出Hello
ex1.test3.test4() # 访问test3输出1次,调用test4输出1次,共2次Hello
ex1.test5().test6().IamBatman(42) # 每一步访问/调用各输出1次,共6次Hello

原理解释

  • __getattribute__是Python内置的属性访问拦截方法,所有对实例属性的访问操作(无论属性是否存在)都会优先触发该方法,我们在这里嵌入standardFunction的执行逻辑,再返回实例本身,就可以覆盖所有属性访问场景,同时支持后续链式操作。
  • __call__是Python内置的可调用实例魔术方法,让实例可以像函数一样被调用,调用时同样执行standardFunction再返回自身,覆盖所有带括号的方法调用场景。

如果需要保留类原有属性(比如parameter1)的正常取值逻辑,只需要在__getattribute__中加白名单判断即可,不会影响核心功能。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 06:06:03