假設我正在創建一個名爲ModelController
的類。我想這個類有一堆方法可以包裝一個單獨的Model
類,這是我的數據庫抽象。如何自定義子類行爲或需要以特定方式進行子類化?
我希望能夠定義一個類的方法上ModelController
像這樣:
ModelController():
@classmethod
def list(cls):
cls.model.list()
@classmethod
def byName(cls, name):
return cls.model(name)
而且具有示範類是這樣的:
ArticleModel(Model):
pass
然後做這樣的事情:
ArticleModelController(ModelController):
# ??? maybe:
# model = ArticleModel
我想我可以繼承我的模型類的控制器,然後有某種mixin模式,但我希望模型成爲控制器的類屬性的原因是我真的不希望在使用cherrypy方法調度程序掛載此類時,不希望通過HTTP意外暴露它的一些方法,或者類似的東西。
也許我正在做一些根本性的非pythonic或犯了某種謬誤。我想做'魔術'嗎?
編輯:我只記得我過去的Django及其ModelForms。他們的工作是這樣的:
class ArticleForm(ModelForm):
class Meta:
model = Article
也許這是我應該看的。是否有可能驗證這個'model'屬性是否定義,如果某些東西是未定義的,則拋出一個錯誤?
那是......不是......元類...... – 2012-02-18 04:18:47
順便說一句,元類*爲*我怎麼會有完成了。 – 2012-02-18 04:19:16