2011-06-29 8 views
7

モデルクラスをDjangoのmodels.pyに追加するときに、私たちが定義するフィールド変数でselfを使わないのはなぜですか?自己フィールド変数を使用しないで、クラス変数にする必要があります。問題が発生する可能性があります。Djangoモデルクラスでselfを使用する

+0

...何?あなたが意味することのいくつかの例を追加できますか?私があなたに従っているかどうか分からないので... – eternicode

答えて

8

Djangoは、metaclassesを使用して、提供するクラス定義に基づいて実際のクラスを作成します。簡単に言うと、モデルクラスをインスタンス化すると、メタクラスはモデルフィールド定義を実行し、適切な属性を持つ対応するクラスを返します。

あなたの質問に直接答えるために、インスタンス変数(object.self)の代わりにクラス変数を使用すると、メタクラスはクラス属性を最初にインスタンス化せずに検査できます。詳細については

the sourceを見て、次のドキュメントをしている:

+1

私は約4年前に自分自身の同様の質問をしましたので、私は 'django/db'コードにびっくりしました。それはいくつかのレベルで啓発されました。それはメタクラスの使い方でマスタークラスのようなものです。 –

関連する問題