擅长:python、mysql、java
<p>在某些情况下,Python允许您动态地更改对象的类。但是,并不是<strong>任何</strong>对象都可以转换为<strong>任何</strong>类,如下例所示(为了可读性,添加了新行):</p>
<pre><code>>>> class A(object):
... pass
...
>>> class B(object):
... pass
...
>>> a = A()
>>> type(a)
<class '__main__.A'>
>>> a.__class__ = B
>>> type(a)
<class '__main__.B'>
>>> a.__class__ = int
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __class__ assignment: only for heap types
</code></pre>
<p>(我不知道确切的规则是什么,但是如果你的类使用<code>__slots__</code>的话,它们必须兼容才能进行转换)</p>
<p>然而,正如其他回答者所指出的,总的来说,这样做是一个非常糟糕的主意,即使有一种方法可以将对一个对象的每个引用转换为对另一个对象的引用。我不会说<em>从不</em>那么做,但是,这种技术可能有合法的用途(例如,我认为它是实现<a href="http://en.wikipedia.org/wiki/State_pattern" rel="nofollow">State Design Pattern</a>的一种简单方法,而不会造成不必要的混乱)。在</p>