1

次のように、モデルに追加の機能を与える基本抽象モデル クラスを定義しました。

class BaseModel(models.Model):
    # ... some fields and methods
    class Meta:
        abstract = True

class Model1(BaseModel):
    # ... some fields and methods
    def required_method(self, *args, *kwargs):
        # implementation

class Model2(BaseModel):
    # ... some fields and methods

ここで、各派生クラスに必要なメソッドが多数定義されていることを確認する必要があります。それらのいずれかが定義されていない場合、manage.py による実行の試行時に例外をスローする必要があります。つまり、BaseModel は、この BaseModel が使用するがそれ自体では定義しないいくつかのインターフェイスを定義するために、各派生クラスを必要とする必要があります。

このチェックはどこに実装すればよいですか? これを確認するのに適した場所は__init__ありますか?BaseModel

編集:これの目的は安​​全のためです。しばらくして誰かまたは私がBaseModelクラスから継承しようとしたが、必要なメソッドを実装するのを忘れた場合、コードがBaseModel欠落しているメソッドを実行しようとするまで、コードは実行されます。だから、それは私にとって潜在的に危険です。そのようなコードが実行されないようにすることをお勧めします。Javaにはインターフェースという仕組みがあると思います。私はPythonで似たようなことをしたいと思っています。

4

1 に答える 1

2

abcパッケージのデコレータを使用して、どのメソッドを抽象化するかをマークします。パッケージがあなたに代わってチェックを行うので、チェックの適切な場所について心配する必要さえありません;-)

于 2012-07-18T14:26:00.030 に答える