请教个问题,感谢~ 问题: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-07-05 16:32:28 +08:00 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-07-05 18:15:14 +08:00
你要做的就是修改 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。 |