【发布时间】:2022-01-04 03:32:59
【问题描述】:
背景
我想对相同的数据执行不同的方法。不同的方法是原始方法的变体,只是param:p3 的参数不同。
# This is original method
def method(p1,p2,p3,data):
return data + p1 + p2 + p3
method(p1=1, p2=2, p3=3, data=10)
16
# By changing param:p3, I can define 3 methods based on original method.
# but it seems stupid and very unclear...
def method1(*args, **kw):
return method(*args, **kw, p3 = 1)
def method2(*args, **kw):
return method(*args, **kw, p3 = 2)
def method3(*args, **kw):
return method(*args, **kw, p3 = 3)
method1(p1=1,p2=2,data =10),\
method2(p1=1,p2=3, data =100)
(14,106)
问题
是否有任何装饰器可以将我原来的 method 修改为任何变体,例如 method1?
# After decorated, method equals to method1
@decorator(p3 = 1)
def method(p1,p2,p3,data):
return data + p1 + p2 + p3
# After decorated, method equals to method2
@decorator(p3 = 2)
def method(p1,p2,p3,data):
return data + p1 + p2 + p3
或者,我不应该使用装饰器来满足我的需求,或者使用一个类来代替吗?
【问题讨论】:
-
你看过
functools.partial吗? -
@rchome 谢谢!我会检查
partial,看来可以满足我的需要