私はModelController
というクラスを構築しています。このクラスには、別のModel
クラスをラップすることができるメソッドがたくさんあります。これは私のデータベース抽象化です。サブクラスの振る舞いをカスタマイズする方法、またはサブクラス化を特別な方法で行う方法はありますか?
私はそうのようModelController
にクラスメソッドを定義することができるようにしたい:
ArticleModel(Model):
pass
そして、このような何か:
ModelController():
@classmethod
def list(cls):
cls.model.list()
@classmethod
def byName(cls, name):
return cls.model(name)
そして、このようなモデルのクラスを持っている
をArticleModelController(ModelController):
# ??? maybe:
# model = ArticleModel
コントローラのモデルクラスをサブクラス化してmixinパターンのようなものですが、モデルをコントローラのクラス属性にしたいのは、このクラスをcherrypyメソッドのディスパッチャーにマウントするときに、HTTP経由でいくつかのメソッドを誤って公開する危険性がありません。そんな感じ。
多分、私は何か根本的に非パイソン的であるか、何らかの誤謬をしています。私は '魔法'をしようとしていますか?
編集:私はちょうどDjangoとそのModelFormsの私の昔を思い出しました。これらは次のように動作します。
class ArticleForm(ModelForm):
class Meta:
model = Article
おそらくこれは私が見ているものです。この 'model'属性が定義されていることを検証し、何かが未定義ではなくサブクラス化されている場合はエラーをスローできますか?
...ありません...メタクラス... –
ちなみに、*メタクラス私が持っているだろうか*ですそれをやった。 –