2016-04-16 5 views
2

私はDjangoでモデルフォームがどのように機能するかを理解しようとしています。Djangoのソースコードからこの機能を理解しようとしています

私はforms.widgets.pyでこの特定の機能に固執していますが、誰かがそれを説明できるかどうかは疑問です。ありがとうございました。

「型」引数は何を意味しますか? "新しい"の引数は何ですか?私はこれが新しいクラスを返すことを理解しますが、それは私の理解の程度です。

Here is a link元のコードです。

class MediaDefiningClass(type): 
    """ 
    Metaclass for classes that can have media definitions. 
    """ 
    def __new__(mcs, name, bases, attrs): 
     new_class = super(MediaDefiningClass, mcs).__new__(mcs, name, bases, attrs) 

     if 'media' not in attrs: 
      new_class.media = media_property(new_class) 

     return new_class 
+0

これはメタクラスです。メタクラスは、他の場所では完全にカバーされている複雑なトピックです。あなたが本当に知りたいが、あなたがPythonに深く関わっていることを警告したい場合は、それを見てください。 –

+0

ありがとうございます。私は道を歩み始めました。これを文脈で理解することが、このコンセプトをもう少し具体的にし、私がそれを理解する助けになることを願っています。 – fstopzero

答えて

1

タイプは、そのクラスの基本クラスを意味します。 「クラスのタイプ」(メディアを提供するために定義されたクラス)を定義することに意味があります。

は、インスタンス作成の最初のステップです。最初に呼ばれ、クラスの新しいインスタンスを返す責任があります。対照的に、の初期は何も返しません。インスタンスの作成後にインスタンスを初期化する役割しか果たしません。

あなたの新しいパラメータは、その名前で新しいクラスを記述するようです。 nameに指定されたNAME、base内の基底クラス、atters内​​のクラスに対して定義されたattrs。確かめるためにはもっとコードが必要です。

1

This answer explains Python metaclasses and what type is

メタクラスは、クラスのクラスです。クラスと同様に、クラスのインスタンスがどのように動作するかを定義します。メタクラスは、クラスの動作を定義します。クラスはメタクラスのインスタンスです。

タイプは、Pythonの通常のメタクラスです。あなたが疑問に思っている場合は、タイプはそれ自身のクラスであり、それ自身のタイプです。 ... Pythonで独自のメタクラスを作成するには、サブタイプをサブクラス化するだけです。

関連する問題