
请教个问题,感谢~ 问题:C1 类如何改动,调用 c1.swimming()时 等同于 调用 c1.swimming(c1.add_punctuation( ))。
class C(object): def __init__(self): self.name = 'zhangsan ' def swimming(self, action): return self.name + action class C1(C): def add_punctuation(self, text): return ':' + text c1 = C1() print c1.swimming(c1.add_punctuation('swimming')) # >zhangsan :swimming print c1.swimming('swimming') # >zhangsan swimming 1 Kilerd 2017 年 7 月 5 日 via iPhone inspect package functools.partial |
2 jsonzz OP @Kilerd 感谢回复!!抱歉我的问题可能没说清楚。我想实现的效果是: ```python c1.swimming(c1.add_punctuation('swimming')) c1.swimming('swimming') #他们调用时等同 ``` |
4 jsonzz OP @Kilerd 感谢你的回复。目前遇到的问题是 C 是工具类,内部有很多方法。C1 继承 C,C1 是调用类,使用 C1 调用 C 方法,参数必须需要处理一下。override 是不是太复杂了,因为 C 有很多方法 |
5 keakon 2017 年 7 月 5 日 你要做的就是修改 swimming 的实现,使用 override 不是最简单的么,看不出哪里复杂: def swimming(self, action): return C.swimming(self, self.add_punctuation(action)) # 或者 return super(C1, self).swimming(self.add_punctuation(action)) 如果你有一堆方法需要修改参数,先写一个 decorator,用处是计算并传递新参数;然后再写个 metaclass,对满足要求的方法都应用上这个 decorator。 |