クラスにカスタム メタクラスがあり、作成時にクラスのクラス メソッドを呼び出す場合があります。
class Metaclass(type):
def __new__(cls, name, bases, attrs):
...
new_class = super(Metaclass, cls).__new__(cls, name, bases, attrs)
...
new_class.get_fields() # do something
...
return new_class
class FooBar(object):
__metaclass__ = Metaclass
@classmethod
def get_fields(cls):
...
(そのようなコードの例はTastypieにあります。)
問題は、私がやりたいかどうかです:
class NewBar(FooBar):
@classmethod
def get_fields(cls):
super(NewBar, cls).get_fields()
...
NewBar
が呼び出された時点でまだ作成されていないため、これは機能しませんsuper
(プログラム フローはまだメタクラスにあります)。それで、回避策はありますか?
おそらくget_fields
メソッドがメタクラスのメソッドになる可能性があることはわかっていますが、これにより継承の実装がはるかに難しくなります (新しいメタクラスとクラス自体の両方を定義する必要があり、このクラスを拡張したい開発者には不向きです)。
(Python 2.7)