擅长:python、mysql、java
<p>问题在于您在<code>Wrapped</code>类中实现<code>myfun</code>。您只更新了类instance的<code>data</code>成员,但是包装类(<code>ClassToWrap</code>实例,即<code>_obj</code>)<code>data</code>成员是过时的,使用的是<code>theirfun</code>的前一个调用。在</p>
<p>您需要在两个实例之间同步数据值:</p>
<pre><code>class Wrapper(object):
...
def __setattr__(self, attr, val):
object.__setattr__(self, attr, val)
if getattr(self._obj, attr, self._obj) is not self._obj: # update _obj's member if it exists
setattr(self._obj, attr, getattr(self, attr))
class Wrapped(Wrapper):
...
def myfun(self):
new_obj = copy.deepcopy(self)
new_obj.data += 1
return new_obj
obj = ClassToWrap(0)
wr0 = Wrapped(obj)
print wr0.data
# 0
wr1 = wr0.theirfun()
print wr1.data
# 1
wr2 = wr1.myfun()
print wr2.data
# 2
wr3 = wr2.theirfun()
print wr3.data
# 3
wr4 = wr3.myfun()
print wr4.data
# 4
wr5 = wr4.theirfun()
print wr5.data
# 5
</code></pre>