は、この例を考えてみましょう:メタクラスメソッドをメソッド解決に参加させることは可能ですか?
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'
ここではそれMeta
メタクラスだで定義されている、方法method
を持つクラスA
を、持っています。クラスB
もありますが、メソッドmethod
もありますが、クラスメソッドとして定義されています。その結果、A
とB
両方から継承
クラスC
は、クラスB
からmethod
を有しています。
しかしA
がmethod
クラスメソッドとして定義されていた場合、C
はA
からmethod
を継承していました。
Meta.method
は、このメタクラスを使用するクラスのクラスメソッドであるかのように継承に参加できるようにしたいと考えています。どういうわけか可能ですか?
'C'はメタクラスとして' Meta'を持ち、 'A'のサブクラスもそうです。 'A'を振るのと同じように、' C'は 'method'という独自の定義を持っているように振舞うべきでしょうか? – user2357112