次のモデルと抽象基本クラスがあります
import abc
from django.db import models
class AbstractBase():
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def my_method(self):
return
class MyModel(models.Model, AbstractBase):
@abc.abstractmethod
def my_method(self):
return 1
しかし、次のエラーが発生します。
メタクラスの競合: 派生クラスのメタクラスは、そのすべてのベースのメタクラスの (厳密ではない) サブクラスでなければなりません
ここでの問題は、(ここで説明されているようにhttp://code.activestate.com/recipes/204197-solving-the-metaclass-conflict/ ) 2 つの基本クラスに 2 つの異なるメタクラスがあるため、Python がどのメタクラスを使用するかを決定できないことだと思います子オブジェクトに使用します。
これを解決するために、多重継承を削除し、次の register メソッドを使用して子クラスを登録しました
abc.register(Child)
しかし、私はこのアプローチがあまり好きではありませんでした。モンキー パッチのように見えるからです。
この問題を解決する別の方法はありますか?
Model メタクラスを Child に明示的に割り当てようとしましたが、うまくいきませんでした。コードを書くことで解決する方法を探しているわけではありません。これは、クラス構造を変更することで解決する必要があると思います。