【发布时间】:2016-07-26 10:52:48
【问题描述】:
考虑这个例子:
class Meta(type):
def method(*_, **__):
print('Meta')
class A(object):
__metaclass__ = Meta
class B(object):
@classmethod
def method(*_, **__):
print('B')
class C(A, B):
pass
C.method() # prints 'B'
这里我们有一个类A,它有方法method,定义在它的元类Meta中。我们有一个类B,它也有一个方法method,但定义为一个类方法。
类C,继承自A 和B,结果具有来自类B 的method。
但如果A 将method 定义为类方法,则C 已从A 继承method。
我想找到一种方法让Meta.method 参与继承,就好像它是一个使用这个元类的类的类方法一样。有没有可能?
【问题讨论】:
-
C也有Meta作为它的元类,A的任何子类也是如此。C是否应该表现得像它有自己的method定义一样,就像你希望A表现得一样?