如何让Python类A的所有方法自动转发至内部ele对象的对应方法?
解决方案
可以利用Python的__getattr__特殊方法实现自动方法转发,无需手动逐个实现ele的方法,也不需要继承。
修改后的类A代码如下:
class A: def __init__(self, ele): self.ele = ele def __getattr__(self, name): # 当访问A实例不存在的属性/方法时,转发给self.ele处理 return getattr(self.ele, name)
原理说明
__getattr__是Python的内置特殊方法,只有当访问的属性或方法在当前实例中不存在时,才会被触发执行。我们在这个方法里把请求转发给self.ele,这样调用A实例的任意方法(只要ele具备该方法),都会自动转向调用ele对应的方法。
使用示例
假设我们有一个包含目标方法的类B:
class B: def fun(self): print("调用了B类的fun方法") def calculate(self, num): return num * 3
实际调用时:
b_instance = B() a_instance = A(b_instance) a_instance.fun() # 输出:调用了B类的fun方法 print(a_instance.calculate(4)) # 输出:12
注意事项
- 如果类A自身定义了和ele同名的方法,会优先调用A自己的方法(因为
__getattr__只在找不到属性时才生效)。 - 这种方式不仅支持方法转发,对ele的属性访问也同样有效,比如
a_instance.some_attr会自动返回b_instance.some_attr(如果ele有这个属性的话)。
内容的提问来源于stack exchange,提问作者TaiJuWu
相关产品推荐
相关产品推荐

