擅长:python、mysql、java
<p>下面是一个例子,它展示了python3.x中的一些选项,具体来说,<code>C3</code>有一个动态创建的元类,但是在很多方面都是显式的。<code>C4</code>有一个元类,它是在元类的<em>函数</em>中动态创建的。<code>C5</code>只是为了证明它也具有{<cd2>}所具有的相同元类属性。(如果您使用函数作为元类而不是<code>type</code>…),那么继承不会导致任何损失</p>
<pre><code>class Meta1(type):
def foo(cls):
print(cls)
class Meta2(type):
def bar(cls):
print(cls)
class C1(object, metaclass=Meta1):
"""C1"""
class C2(object, metaclass=Meta2):
"""C2"""
class C3(C1, C2, metaclass=type('Meta3', (Meta1, Meta2), {})):
"""C3"""
def meta_mixer(name, bases, dct):
cls = type('MixedMeta', tuple(type(b) for b in bases), dct)
return cls(name, bases, dct)
class C4(C1, C2, metaclass=meta_mixer):
"""C4"""
C1.foo()
C2.bar()
C3.foo()
C3.bar()
C4.foo()
C4.bar()
class C5(C4):
"""C5"""
C5.foo()
C5.bar()
</code></pre>
<p>需要注意的是,我们在这里使用fire(与您在原始示例中使用fire的方式相同)。不能保证元类在合作多重继承中能很好地发挥作用。如果它们不是为它而设计的,那么很有可能在某个<em>点使用它时遇到bug。如果它们是为它而设计的,那么就没有理由进行这种骇人听闻的运行时混合:-)。在</p>