内蔵法(マジックメソッド)クラス

内蔵法(マジックメソッド)クラス

クラス定義内のすべて、__ __クラスメソッドの端がビルトインされている方法、また、マジックメソッドとして知られているで始まります

ビルトインクラスのメソッド、自動的に一定の条件の下でトリガされます

1、__ init__

クラスを呼び出すときに自動的にトリガ

2、__ new__

init __ __トリガ前に自動的にトリガ、内部__ __新しいことで、新しいオブジェクトを生成し、クラスがあり呼び出します

クラスデモ:
    __init__の前に#トリガー自動トリガー
    デフ__new __(CLS、* argsを、** kwargsから):
        印刷( '__ new__実行')
        ここで新しいオブジェクトが返されない場合は、内部#が戻り__init__をトリガーするオブジェクトによって、新しいオブジェクトを生成します、それは__init__トリガされません
        リターンオブジェクト.__新しい__(CLS、* argsを、** kwargsから)

    デフ__init __(自己):
        印刷( '__ init__実行')

OBJ =デモ()
#__New__実行
#__init__実行 

3、__ getattr__

何のトリガーがない場合は、オブジェクトのプロパティは、「オブジェクトのプロパティ」プロパティを通じて取得した場合

クラスデモ:
    #オブジェクトのプロパティを取得することにより、「オブジェクト。プロパティ」、プロパティはトリガーをしない場合
    デフ__getattr __(自己、アイテム):
        印刷( '__ getattr__実行')
        印刷(アイテム)
        #デフォルトなしリターンなし、デフォルトの戻り値を設定することはできません
        リターンのデフォルト設定では、値を返します "

OBJ =デモ()
印刷(obj.x)
#__getattr__実行
# バツ
#デフォルトの戻り値を設定

  

4、__ getattribute__

「オブジェクトプロパティ」を通じて取得したオブジェクトのプロパティには、かかわらず、財産の不在の、トリガーとなる場合には

注:__ __ GETATTRと__ __のgetAttributeクラス内に存在する場合には、それが唯一の__のgetAttributeをトリガします__

クラスデモ:
    デフ__getattribute __(自己、アイテム):
        印刷( '__ getattribute__実行')
        印刷(アイテム)
        #デフォルトの戻りなしがないかどうか、あなたはデフォルトの戻り値を設定することができます
        リターンのデフォルト設定では、値を返します "

        プロパティ値を見つけるために#ないオブジェクトによって、探している、ここでプロパティ値を取得することができません。属性は、クラッシュの原因再帰を引き起こす可能性があります
        #リターン自己.__ dictの__ [アイテム]
        #リターンGETATTR(自己、アイテム)

OBJ =デモ()
obj.x = 10
印刷(obj.x) 
#__Getattribute__実行
# バツ
#デフォルトの戻り値を設定

5、__ __ SETATTR

使用する場合、「オブジェクトプロパティ属性値=」属性値を追加またはトリガが変更され

クラスデモ:
        #オブジェクトを使用して。属性= value属性トリガ
    デフ__setattr __(自己、キー、値):
        印刷( '__ setattr__実行')
        印刷(キー、値)
        空間内のオブジェクトの名前にプロパティを追加または変更する必要性#
        自己.__ dictの__ [キー] =値

OBJ =デモ()
プリント(OBJ .__ dict__に)#{}
obj.x = 10#__setattr__実行/ X 10
プリント(OBJ .__ dict__に)#{ 'X':10}  

6、__ call__

オブジェクト「オブジェクトを()」を呼び出すときにトリガ

クラスデモ:
    #使用目的()の呼び出しがトリガされたときにオブジェクト
    デフ__call __(自己、* argsを、** kwargsから):
        印刷( '__ call__実行')
        #デフォルトの戻りなし、デフォルトの戻り値を設定することはできません
        リターン「既定値に設定」

OBJ =デモ()
印刷(OBJ())
#__call__実行
#既定値に設定

7、__ str__

印刷オブジェクトは、「文字列」の戻り値を持っている必要がトリガーすると

クラスデモ:
    デフ__str __(自己):
        印刷( '__ str__実行')
        #戻り値は文字列でなければなりません
        リターン「文字列」

OBJ =デモ()
印刷(OBJ)
#__str__実行
文字列# 

8、__ getitem__

「ターゲット[キー]」プロパティ値を介して取得するときにトリガ

クラスデモ:
    デフ__getitem __(自己、アイテム):
        印刷( '__ getitem__実行')
        印刷(アイテム)
        #Noneを返します。この手順を記述していないかどうかを、与えられていないに値と戻り値を探します
        リターン自己.__ dictの__ [アイテム]

OBJ =デモ()
obj.x = 10
プリント(OBJ [ 'X'])
#__getitem__実行
# バツ
#10  

9、__ setitem__

トリガーは、属性「オブジェクト[キー] =値」によって提供された場合

クラスデモ:
    デフ__setitem __(自己、キー、値):
        印刷( '__ getitem__実行')
        印刷(キー、値)
        空間内のオブジェクトの名前にプロパティを追加または変更する必要性#
        自己.__ dictの__ [キー] =値

OBJ =デモ()
プリント(OBJ .__ dict__に)#{}
OBJ [ 'X'] = 10
#__getitem__実行
#×10
プリント(OBJ .__ dict__に)#{ 'X':10}

  

 

 

おすすめ

転載: www.cnblogs.com/lvguchujiu/p/11959946.html