<p>亚历克斯说得很清楚,没有办法严格做到这一点。
我想不出有什么办法能让你这么做。也许你需要一个工厂功能的插件?或者同一物体的不同状态?在</p>
<p>然而,Python就是这样,您可以有一个“shell”对象,它的唯一目的是授予对underlyign对象的访问权。然后可以修改底层对象:当shell对象保持不变时,底层对象是另一个对象。在</p>
<p>一个可能的实现如下(我已经尝试了一次<code>__getattribute__</code>的不干净的实现-它可以做得更好)</p>
<pre><code># -*- coding: utf-8 -*-
class Insect(object):
pass
class Catterpillar(Insect):
a = "I am a caterpillar"
class Butterfly(Insect):
a = "I am a butterfly"
class Cocoon(object):
def __init__(self, *args, **kw):
self._true = Catterpillar(*args, **kw)
def __getattribute__(self, attr):
try:
if attr != "_true":
return getattr(object.__getattribute__(self, "_true"),attr)
except AttributeError:
pass
return object.__getattribute__(self, attr)
def __setattr__(self, attr, val):
if attr != "_true":
setattr(self._true, attr, val)
else:
object.__setattr__(self, attr, val)
def change(self, *args, **kw):
self._true = Butterfly(*args, **kw)
</code></pre>
<p>有了这个,你可以得到如下信息:</p>
^{pr2}$
<p>一。
在change函数上,您可以备份您想要的任何属性,并且可以在<code>__getattribute__</code>方法中免除其他属性的更改。在</p>