Pythonic风格装饰类方法:复用类方法并加常量的正确实现方式
Pythonic装饰器实现方法复用加常量
这个需求用装饰器来实现确实很合适!而且写法相当Pythonic,我给你一步步拆解:
1. 编写带参数的装饰器
因为我们需要给方法添加一个自定义常量,所以得写一个带参数的三层嵌套装饰器——外层负责接收常量值,中层接收被装饰的函数,内层是实际执行逻辑的包装函数:
def add_constant(constant): # 外层函数:接收要添加的常量 def decorator(func): # 中层函数:接收被装饰的方法 def wrapper(self, *args, **kwargs): # 内层包装函数:调用原方法并添加常量 return func(self, *args, **kwargs) + constant return wrapper return decorator
2. 在类中应用装饰器
现在把这个装饰器用到你的类方法上,替代原来手动调用self.f(x)再加常量的写法:
class A: def f(self, x): return 2 * x # 用装饰器标记g方法,指定要添加的常量为10 @add_constant(10) def g(self, x): # 这里只需要返回原方法的调用结果,装饰器会自动帮我们加常量 return self.f(x)
3. 验证效果
运行测试代码看看结果:
a = A() print(a.f(5)) # 输出: 10 print(a.g(5)) # 输出: 20,正好是10 + 10,符合预期
为什么这是Pythonic的写法?
- 复用性强:如果以后需要给其他方法添加不同常量,直接用
@add_constant(xxx)标记就行,不用重复写类似的逻辑 - 可读性高:一眼就能看出
g方法的作用是对self.f(x)的结果加10,逻辑清晰 - 扩展性好:如果后续要修改添加常量的逻辑(比如改成乘常量),只需要修改装饰器的内层函数,所有用到这个装饰器的方法都会自动生效
内容的提问来源于stack exchange,提问作者math
相关产品推荐
相关产品推荐

