魔法の方法とは何ですか?
Pythonでは、二重下線 __
で囲まれたすべてのメソッドをまとめてMagicMethod(マジックメソッド)と呼びます。これは特別なメソッドです。通常のメソッドを呼び出す必要がありますが、マジックメソッドは呼び出さなくても自動的に実行できます。
魔法のメソッドは、クラスまたはオブジェクトの特定のイベントが起動された後に自動的に実行され、クラスに魔法の「魔法の力」を与えます。独自のプログラムに従って独自の特殊関数クラスをカスタマイズする場合は、これらのメソッドを書き直す必要があります。
Pythonで一般的に使用される演算子、forループ、およびクラス操作はすべて、魔法のメソッドで実行されます。
魔法の方法の適用 __init__
、 __new__
、 __del__
classPeople(object):
# オブジェクトを作成する
def __new__(cls,*args,**kwargs):print("コンストラクターをトリガーしました")
ret =super().__new__(cls) #親クラスを呼び出す__new__()オブジェクトを作成するメソッド
return ret ##オブジェクトを返す
# オブジェクトをインスタンス化します
def __init__(self, name, age):
self.name = name
self.age = age
print("初期化方法")
# オブジェクトを削除する
# delオブジェクト名またはプログラム実行終了後
def __del__(self):print("デストラクタメソッド、オブジェクトを削除")if __name__ =='__main__':
p1 =People('xiaoming',16)
出力:
コンストラクターをトリガーしました
初期化方法
デストラクタメソッド、オブジェクトを削除
__call__
メソッドを使用してFibonacciシーケンスを実現します
# フィボナッチシーケンスは、そのような0のシーケンスを指します,1,1,2,3,5,8,13
# 特記事項:0番目の項目は0で、1番目の項目は最初の1です。 3番目の項目から、各項目は最初の2つの項目の合計に等しくなります。
classFib(object):
def __init__(self):
pass
def __call__(self,num):
a,b =0,1;
self.l=[]for i inrange(num):
self.l.append(a)
a,b= b,a+b
return self.l
def __str__(self):returnstr(self.l)
__ rept__=__str__
f =Fib()print(f(10))
出力:
[0,1,1,2,3,5,8,13,21,34]
__init __
**トリガーメカニズム:オブジェクトをインスタンス化した直後にトリガーします
パラメータ:現在のオブジェクトを受け取る少なくとも1つの自己、他のパラメータは必要に応じて定義されます
戻り値:なし
役割:オブジェクトのメンバーを初期化します
__new__
**トリガーのタイミング:オブジェクトがインスタンス化されたときに自動的にトリガーされます(__init__前にトリガー)
パラメータ:少なくとも1つのclが現在のクラスを受け取り、他のパラメータは初期化メソッドのパラメータに従って決定されます
戻り値:オブジェクトインスタンスを返す必要があります。戻り値がない場合、オブジェクトをインスタンス化した結果はNoneになります。
役割:オブジェクトをインスタンス化します
注:インスタンス化されたオブジェクトはObjectクラスの基礎となる実装であり、他のクラスはObjectを継承します__new__インスタンス化オブジェクトを実現できます。
__del__
**トリガーのタイミング:このタイプのオブジェクトが破棄されると自動的にトリガーされます
パラメータ:自己、現在のオブジェクトを受け入れます
戻り値:なし
役割:オブジェクトの作成時にリソースを閉じるか解放します
注:現在のオブジェクトに変数参照がない場合にのみ、delは必ずしも現在のメソッドをトリガーするわけではありません
__ call__
オブジェクトのマジックメソッドを呼び出す
トリガーのタイミング:オブジェクトが関数として呼び出されたときにトリガーされます,方法:オブジェクト()
パラメータ:至少一个self接收对象,其余根据调用时パラメータ决定
戻り値:状況に応じて
機能:複雑なステップを組み合わせて呼び出しステップを減らすことができ、使い勝手が良い
注:なし
__ len__
トリガーのタイミング:lenを使用(オブジェクト)トリガーするとき
パラメータ:パラメータ自己
戻り値:整数である必要があります
機能:オブジェクトメンバーの数を検出するように設定できますが、他の任意の操作も実行できます
注:戻り値は整数である必要があります。そうでない場合、構文エラーが報告され、要件はフォーマット要件です。
__ str__
トリガーのタイミング:印刷を使用する(オブジェクト)またはstr(オブジェクト)トリガーするとき
パラメータ:自己受信オブジェクト
戻り値:文字列タイプである必要があります
機能:操作するための印刷(オブジェクト時間)、文字列の取得、通常はショートカット操作に使用されます
注:なし
__ repr__
トリガーのタイミング:reprの使用(オブジェクト)トリガーするとき
パラメータ:自己受信オブジェクト
戻り値:文字列である必要があります
機能:オブジェクトをreprから文字列に変換するときに使用し、ショートカット操作にも使用できます
__ bool__
トリガーのタイミング:boolを使用する(オブジェクト)トリガーするとき
パラメータ:自己受信オブジェクト
戻り値:ブール値である必要があります
機能:実際の状況に応じて決定され、ショートカットとして使用できます
注意:ブール値を返す操作にのみ適しています
__ format__
トリガーのタイミング:文字列を使用.format(オブジェクト)トリガーされたとき
パラメータ:1つの自己受信オブジェクト、1つのパラメータ受信フォーマット{}たとえば、フォーマットします:>5
戻り値:文字列である必要があります
役割:設定オブジェクトは、フォーマットのパラメーター、およびカスタムオブジェクトフォーマットルールとして使用できます。
注:なし
__ lt__(self, other):
より小さい記号の動作を定義します:x<yはxを呼び出します.lt(y)
__ le__(self, other):
以下の符号の動作を定義します:x<=yはxを呼び出します.le(y)
__ eq__(self, other) :
等しい符号の動作を定義します:x==yはxを呼び出します.eq(y)
__ ne__(self, other):
等しくない符号の動作を定義します:x!=yはxを呼び出します.ne(y)
__ gt__(self, other):
大なり記号の動作を定義します:x>yはxを呼び出します.**gt(y)
__ ge__(self, other) :
x以上の動作を定義します。>=yはxを呼び出します.ge(y)
__ add__(self, other)追加の動作を定義します。+__sub__(self, other)減算の動作を定義します。-__mul__(self, other)乗算の動作を定義します。*__truediv__(self, other)真の分割の動作を定義します。/__floordiv__(self, other)整数分割の動作を定義します。//__mod__(self, other)モジュロアルゴリズムの動作を定義します。%__divmod__(self, other)いつdivmodを定義する()呼び出されたときの動作
__ pow__(self, other[, modulo])いつ電源を入れるかを定義する()電話または**動作中の動作
__ lshift__(self, other)ビット単位の左シフトの動作を定義します。<<__rshift__(self, other)ビット単位の右シフトの動作を定義します。>>__and__(self, other)ビット単位のAND演算の動作を定義します。&__xor__(self, other)ビット単位のXOR操作の動作を定義します。^__or__(self, other)ビット単位のOR操作の動作を定義します。|
__ iadd__(self, other)割り当て追加の動作を定義します。+=__isub__(self, other)割り当て減算の動作を定義します。-=__imul__(self, other)割り当て乗算の動作を定義します。=__itruediv__(self, other)真の分割を割り当てる動作を定義します。/=__ifloordiv__(self, other)割り当てられた整数除算の動作を定義します。//=__imod__(self, other)割り当てモジュロアルゴリズムの動作を定義します。%=__ipow__(self, other[, modulo])割り当て指数の動作を定義します。**=__ilshift__(self, other)割り当ての動作をビット単位の左シフトで定義します。<<=__irshift__(self, other)割り当てのビット単位の右シフトの動作を定義します。>>=__iand__(self, other)割り当てのビット単位のAND演算の動作を定義します。&=__ixor__(self, other)割り当てビットごとのXOR操作の動作を定義します。^=__ior__(self, other)割り当てのビット単位のOR操作の動作を定義します。|=
__ pos__(self)ポジティブサインの振る舞いを定義します。+x
__ neg__(self)負の符号の動作を定義します。-x
__ abs__(self)腹筋として定義()呼び出されたときの動作
__ invert__(self)ビット単位の否定の動作を定義します。~x
__ complex__(self)複雑として定義()呼び出し時の動作(適切な値を返す必要があります)
__ int__(self)intとして定義()呼び出し時の動作(適切な値を返す必要があります)
__ float__(self)いつフロートするかを定義する()呼び出し時の動作(適切な値を返す必要があります)
__ round__(self[, n])ラウンドとして定義された場合()呼び出し時の動作(適切な値を返す必要があります)
__ index(self)__ 1.オブジェクトがスライス式に適用される場合、シェーピング強制を実装します
2. スライスに使用できるカスタム数値タイプを定義する場合,インデックスを定義する必要があります
3. インデックスが定義されている場合、intも定義する必要があり、同じ値を返します
__ enter__
と __exit__
__ enter__(self)1.withステートメントを使用するときの初期化動作を定義します
2. enterの戻り値は、withステートメントのターゲットまたはasの後の名前によってバインドされます。
__ exit__(self, exctype, excvalue, traceback)1.コードブロックが実行または終了したときにコンテキストマネージャーが実行する必要があることを定義します
2. 通常、例外の処理、作業のクリーンアップ、または一部のコードブロックの実行後の日常的な作業に使用されます
__ len__(self)lenとして定義()呼び出されたときの動作(コンテナー内の要素の数を返します)
__ getitem__(self, key)コンテナ内の指定された要素を取得する動作を定義します。これはselfと同等です。[key]__setitem__(self, key, value)設定コンテナ内の指定された要素の動作を定義します。これはselfと同等です。[key]= value
__ delitem__(self, key)コンテナ内の指定された要素を削除する動作を定義します。これはdelselfと同等です。[key]__iter__(self)コンテナ内の要素を反復するときの動作を定義します
__ reversed__(self)反転時に定義()呼び出されたときの動作
__ contains__(self, item)メンバーシップテスト演算子を使用するときの動作を定義します(であるかどうか)
Recommended Posts