2011-06-29 31 views
7

將模型類添加到Django中的models.py時,爲什麼我們不使用self來定義我們定義的字段變量?不應該不使用self字段變量,而是使用類變量來代替「可能」導致問題。在Django中使用self模型類

+0

...什麼?你可以添加一些你的意思嗎?因爲我不確定我是否關注你... – eternicode

回答

8

Django使用metaclasses根據您提供的類定義創建實際的類。簡而言之,在實例化模型類時,元類將遍歷模型字段定義並返回具有適當屬性的相應類。

要直接回答你的問題,使用類變量而不是實例變量(object.self)允許元類檢查類屬性,而不必首先實例化它。

欲瞭解更多信息,看看the source和下列文件:

+1

4年前我問了一個類似的問題,所以我介入了'django/db'代碼。它在幾個層面上得到了啓發。它是元類使用中的一個碩士類。 –