擅长:python、mysql、java
<p>似乎可以动态更改<code>Base.__bases__</code>
如果<code>Base.__base__</code>不是{<cd3>}。(动态更改,我的意思是,所有从<code>Base</code>继承的预先存在的实例也会动态更改。否则请参见<a href="https://stackoverflow.com/questions/3193158/bases-doesnt-work-whats-next/3193260#3193260">Mykola Kharechko's solution</a>)。在</p>
<p>如果<code>Base.__base__</code>是某个伪类<code>TopBase</code>,那么对<code>Base.__bases__</code>的赋值似乎有效:</p>
<pre><code>class Extender(object):
def extension(self):
print("Some work...")
class TopBase(object):
pass
class Base(TopBase):
pass
b=Base()
print(Base.__bases__)
# (<class '__main__.TopBase'>,)
Base.__bases__ += (Extender,)
print(Base.__bases__)
# (<class '__main__.TopBase'>, <class '__main__.Extender'>)
Base().extension()
# Some work...
b.extension()
# Some work...
Base.__bases__ = (Extender, TopBase)
print(Base.__bases__)
# (<class '__main__.Extender'>, <class '__main__.TopBase'>)
Base().extension()
# Some work...
b.extension()
# Some work...
</code></pre>
<p>这在Python2(用于新样式类和旧样式类)和Python3中进行了测试。我不知道为什么它能起作用,而这个却不能:</p>
^{pr2}$