需求场景:在不改变原代码的情况下,将所有方法的参数,类型转换为另一种类型,这里我统一将int转换为str
原始类:
class Base(object):
def fun1(self, p1, p2):
print p1, type(p1), p2, type(p2)
base = Base()
base.fun1(1, '1')
Output:
1 <type 'int'> 1 <type 'str'>
下面利用__call__,来动态的修改参数类型:
def type_convert(fn):
class Wrapper(object):
def __call__(self, *args):
fn(*[str(arg) if int == type(arg) else arg for arg in args])
return Wrapper()
type_convert(base.fun1)(1, '1')
Output:
1 <type 'str'> 1 <type 'str'>