私は既存のDjangoライブラリを使用しています。抽象化したいクラスを作成しています。PythonでDjangoの抽象基本クラスのように動作するクラスを作成するにはどうすればよいですか?
問題のクラスがBaseFoo
であるとします。
現在、実装には基本クラスBaseFoo
があります。
延長するクラスがBaseFoo
になるたびに、メタクラスがそのクラスをクラスのリストに追加します。私が何か書くことができるようにしたいと思い
if name not in ('BaseFoo',):
class_list.append(new_cls)
:
class MyBaseFoo(BaseFoo):
class Meta:
abstract = True
をそして、メタクラスのスキップを持っていることは、明示的にクラス名のハードコードされたテストを行うことによってBaseFoo
を追加しません。すべてBaseFoo
抽象オブジェクトです。だから私はDjangoがモデルで同じことをやっているのか、これを自分でやるための簡単でエレガントな方法があるのだろうかと思っています。
Djangoがモデルを定義するために使用するコードのいくつかを見てきましたが、私はいくつかのポインタを使うことができました。また、必ずclass Meta
を使用せずにこれを行うさらに簡単な方法がある場合は、私もそれに開いています。私は、このソリューションによって、特に興奮していないです
注:
class MyBaseFoo(BaseFoo):
abstract = True
class ActualFoo1(MyBaseFoo):
abstract = False
class ActualFoo2(MyBaseFoo):
abstract = False
'nameは( 'BaseFoo')ではありませんあなたが思っていることをしません - ' name'が 'BaseFoo'の部分文字列であるかどうかをチェックします(' name = 'Foo''の場合、これは偽)。シングルトンタプルを作成するには '( 'BaseFoo'、)'(末尾のカンマに注意してください)を使用しますが、 'name!= 'BaseFoo''はなぜですか? – delnan
+1(オフセット)なぜdownvoteですか?この質問はどうして間違っていますか? –
ええ、私のコードに誤字がありました。これは難読化されたコードです...元のバージョンは実際には '' BaseFoo '、' OtherBaseFoo ')ではありませんでしたが、単純化したかったのです。 –