2011-05-17 52 views
1

我有一系列與各種Web API交互的模型。我需要確保每個模型都有一個特定的方法。使用PHP,我會創建一個類接口,以確保我的模型具有完成它工作所需的方法,但似乎Python接口不能與Django模型一起使用。Django - 模型類接口?

我假定這樣做會創建一個擴展model.Model一個基類,它定義了我所需要的方法的方式,如果需要的話我可以覆蓋它們在每個API模型。我如何在沒有Django的情況下做到這一點,在同步數據庫時拾取「基礎」類?這甚至是正確的方式嗎?

回答

1

我認爲這更像是一個Python問題。你當然可以看看Django abstract base classes,但我建議你做更pythonic的事情,而不是擔心試圖執行這些類接口。要麼你實現了方法,要麼你沒有實現,讓調用代碼來處理它。

4

您可以使用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來獲得你想要的行爲。 :)