我有一系列與各種Web API交互的模型。我需要確保每個模型都有一個特定的方法。使用PHP,我會創建一個類接口,以確保我的模型具有完成它工作所需的方法,但似乎Python接口不能與Django模型一起使用。Django - 模型類接口?
我假定這樣做會創建一個擴展model.Model一個基類,它定義了我所需要的方法的方式,如果需要的話我可以覆蓋它們在每個API模型。我如何在沒有Django的情況下做到這一點,在同步數據庫時拾取「基礎」類?這甚至是正確的方式嗎?
我有一系列與各種Web API交互的模型。我需要確保每個模型都有一個特定的方法。使用PHP,我會創建一個類接口,以確保我的模型具有完成它工作所需的方法,但似乎Python接口不能與Django模型一起使用。Django - 模型類接口?
我假定這樣做會創建一個擴展model.Model一個基類,它定義了我所需要的方法的方式,如果需要的話我可以覆蓋它們在每個API模型。我如何在沒有Django的情況下做到這一點,在同步數據庫時拾取「基礎」類?這甚至是正確的方式嗎?
我認爲這更像是一個Python問題。你當然可以看看Django abstract base classes,但我建議你做更pythonic的事情,而不是擔心試圖執行這些類接口。要麼你實現了方法,要麼你沒有實現,讓調用代碼來處理它。
您可以使用Meta
類的abstract = True
方面。
class BaseModelInterface(models.Model):
class Meta:
abstract = True
class ActualModel(BaseModelInterface):
[...normal model code...]
文檔:http://docs.djangoproject.com/en/1.3/ref/models/options/
雖這麼說,一般鴨子類型被認爲是「Python是這樣」,並調用代碼應該測試方法存在(if hasattr(instance, 'method_name')
)。也就是說,你比我們更瞭解你的特定實現,所以你可以使用abstract = True來獲得你想要的行爲。 :)