私は既存のDjangoライブラリを使用しており、抽象化したいクラスを作成しています。
問題のクラスがであるとしましょうBaseFoo
。
現在、実装には基本クラスがありBaseFoo
ます。
拡張するクラスが作成されるたびBaseFoo
に、メタクラスはそれをクラスのリストに追加します。BaseFoo
クラス名のハードコードされたテストを実行しても、明示的に追加されません。
if name not in ('BaseFoo',):
class_list.append(new_cls)
私は次のようなものを書けるようになりたいです:
class MyBaseFoo(BaseFoo):
class Meta:
abstract = True
そして、メタクラスBaseFoo
に抽象であるすべてのオブジェクトをスキップさせます。ですから、Djangoがモデルで同じことをどのように行うのか、そしてこれを自分で行うための簡単でエレガントな方法があるのかどうか疑問に思っていると思います。
Djangoがモデルを定義するために使用するコードのいくつかを調べましたが、いくつかのポインターを使用することもできます。また、必ずしも使用せずにこれを行うさらに簡単な方法がある場合は、class Meta
私もそれを受け入れます。
私はこの解決策に特に興奮していないことに注意してください:
class MyBaseFoo(BaseFoo):
abstract = True
class ActualFoo1(MyBaseFoo):
abstract = False
class ActualFoo2(MyBaseFoo):
abstract = False