擅长:python、mysql、java
<p>更新:一种可能的替代方法是使用类修饰符来扮演当前的<code>B</code>角色:</p>
<p>(不过这还需要一些工作)。在</p>
<pre><code>class A1(object):
def foo(self):
print 'foo'
class A2(object):
def foo(self):
print 'bar'
from functools import wraps
def auto_impl_A(cls):
@wraps(cls)
def f(val, *args, **kwargs):
base = {1: A1, 2: A2}.get(val, object)
return type(cls.__name__, (cls, base,), dict(cls.__dict__))(*args, **kwargs)
return f
@auto_impl_A
class MyC(object):
pass
</code></pre>
<p>因此,用户装饰他们的类而不是继承,并按常规编写<code>C</code>,但它的基将是一个适当的<code>A</code>。。。在</p>
<hr/>
<p>如果我理解正确的话,从一开始使用工厂函数并创建一个新的<code>type</code>并使用适当的基来创建一个新的<code>type</code>会更容易。。。在</p>
^{pr2}$
<p>相当于:</p>
<pre><code>class Aimpl1(object):
def foo(self):
print "FOO"
class Aimpl2(object):
def foo(self):
print "BAR"
def C_factory(base):
class C(base):
pass
return C
for b in (Aimpl1, Aimpl2):
c=C_factory(b)()
c.foo()
print type(c)
</code></pre>