Pythonの基礎知識の詳細は入門から(八)魔法の方法に精通するまで
9375 ワード
目次 Python基礎知識入門から精通(八)魔法方法 魔法の方法 基礎魔法方法(比較的常用) 比較オペレータ 演算子 逆演算(演算方法に類似) インクリメンタル付与演算 一元オペレータ 型変換 コンテキスト管理(with文) カスタムコンテナ Pythonの基礎知識の詳細は入門から(八)魔法の方法に精通するまで
その他のpython学習ノートセット:
Pythonの基礎知識の詳細入門から全集インデックス編に精通するまで
魔法の方法とは
その名の通り魔法の方法は、あなたのクラスの操作に「魔力」を付加する方法であり、私たちに非常に柔軟性を与え、私たちが必要とするときに何らかの方法を提供してあなたの考えを実現させることができます.Pythonはオブジェクト向けの言語をサポートしていることはよく知られています.Pythonの魔法の方法はPythonがオブジェクトに直面する上でよりよくできます.
魔法の使い方
魔法の方法はpythonの内部ですでに与えられていて、それは二重の下線に囲まれていて、いくつかの特定の時に自動的に呼び出されます
私たちはある魔法の方法を書き換えて、私たちが行う必要がある操作を定義することができて、この魔法の方法が自動的に呼び出された時も私たちが必要とする操作を完成しました
基礎魔法の方法(比較的よく使われる) __ new__(cls[, …]) 1.オブジェクトをインスタンス化するときに最初に呼び出される方法2.そのパラメータは__に直接渡されます.init__方法処理3.私たちは一般的にこの方法を書き換えることはありません.可変タイプを継承し、変更する必要がある場合は、 を変更する必要があります. __ init__(self[,...])構築方法は、クラスを初期化(インスタンスの入力可能なパラメータを生成)するときに呼び出される である. __ del__(self)解析方法は、インスタンス化オブジェクトが完全に破棄された(このオブジェクトを指すラベルがない)場合に呼び出される(インスタンス化オブジェクトのすべてのポインタが破棄された場合に呼び出される)delを使用する場合に呼び出されるのではなく、ゴミ回収メカニズム に相当する. __ call__(self[,args...])クラスのインスタンスが関数のように呼び出されることを許可する:x(a,b)がx._を呼び出すcall__(a, b) __ len__(self)len()によって呼び出されたときの動作 を定義する. __ repr__(self)repr()によって呼び出されたときの動作を定義するこれは、 のような戻り文字列を実現することができる. __ str__(self)str()によって呼び出されたときの動作を定義し、これを書き換えることで戻り文字列 を実現することができる. __ bytes__(self)bytes()によって呼び出されたときの動作 を定義する. __ hash__(self)hash()によって呼び出されたときの動作 を定義する. __ bool__(self)bool()によって呼び出されたときの動作を定義し、TrueまたはFalse を返すべきである. __ format__(self,format_spec)format()によって呼び出されたときの動作属性に関する方法 を定義する. __ getattr__(self,name)ユーザが存在しない属性を取得しようとするときの動作 を定義する. __ getattribute__(self,name)クラスの属性がアクセスするときの動作 を定義する. __ setattr__(self,name,value)属性が設定されたときの動作 を定義する. __ delattr__(self,name)属性が削除されたときの動作 を定義する. __ dir__(self)dir()が呼び出されたときの動作 を定義する. __ get__(self,instance,owner)記述子の値が取得されたときの動作 を定義する. __ set__(self,instance,value)記述子の値が変更されたときの動作 を定義する. __ delete__(self,instance)記述子の値が削除されたときの動作 を定義する.
ひかくオペレータ
__ lt__(self,other)符号より小さい動作を定義する:xy呼び出し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])power()によって呼び出された動作または**演算時の動作を定義する_lshift__(self,other)ビット左シフトの動作を定義する:<_rshift__(self,other)ビット右シフトの動作を定義する:>>_and__(self,other)ビット単位と操作の動作を定義する:&_xor__(self,other)ビット別または操作の動作を定義する:^_or__(self,other)ビット単位またはアクションの動作を定義します:|
ぎゃくえんざん
__ radd__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rsub__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rmul__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rtruediv__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rfloordiv__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rmod__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rdivmod__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rpow__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rlshift__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rrshift__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rxor__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_ror__(self,other)被演算オブジェクト(左側の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される
インクリメンタル付与演算
__ 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)ビット単位の値を割り当てる動作を定義します:&=_ixor__(self,other)ビット別に値を割り当てる動作を定義します:^=_ior__(self,other)ビット単位または操作に値を割り当てる動作を定義します.|=
一元オペレータ
__ neg__(self)正号の動作を定義する:+x_pos__(self)マイナス記号の動作を定義する:-x_abs__(self)abs()によって呼び出されたときの動作を定義する_invert__(self)ビットによる反転を定義する行為:~x
タイプ変換
__ complex__(self)complex()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)_int__(self)int()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)float__(self)float()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)round__(self[,n])round()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)
__ index__(self)オブジェクトがスライス式に適用する場合、整形強制変換 が実現される.スライス時に使用可能なカスタム数値型を定義した場合は、__を定義する必要があります.index__ _もし_index __ 定義されている場合_int__ 定義する必要があり、同じ値 を返す.
コンテキスト管理(with文) __ enter__(self) 1. with文を使用する場合の初期化動作を定義する __ enter__ の戻り値はwith文のターゲットまたはas後の名前にバインドされる __ exit__(self, exc_type, exc_value, traceback) は、コードブロックが実行または終了するときにコンテキストマネージャが何をすべきかを定義する .は、通常、異常を処理するために使用する、作業をクリアする、またはいくつかのコードブロックの実行が完了した後の日常的な作業容器タイプ(一般的には操作容器クラスに使用される) を行うために使用される. __ len__(self)len()によって呼び出されたときの動作(一般にコンテナクラスの長さを返す) を定義する. __ getitem__(self,key)は、self[key] に相当するコンテナ内の指定された要素を取得する動作を定義する. __ setitem__(self,key,value)コンテナで指定した要素を設定する動作を定義します.self[key]=value に相当します. __ delitem__(self,key)は、del self[key] に相当するコンテナ内の指定された要素を削除する動作を定義する. __ iter__(self)反復コンテナ内の要素の動作を定義する __ reversed__(self)reversed()によって呼び出されたときの動作 を定義する. __ contains__(self,item)メンバーテスト演算子(inまたはnot in)を使用する場合の動作 を定義する
カスタムコンテナ
可変コンテナのカスタマイズに定義が必要な場合len__および_getitem__メソッド可変コンテナを定義する必要がある場合_len__および_getitem__方法はあと_setitem__および_delitem__方法
例可変カスタムリストをカスタマイズし、各要素がアクセスされた回数を記録する必要があります.
その他のpython学習ノートセット:
Pythonの基礎知識の詳細入門から全集インデックス編に精通するまで
魔法の方法とは
その名の通り魔法の方法は、あなたのクラスの操作に「魔力」を付加する方法であり、私たちに非常に柔軟性を与え、私たちが必要とするときに何らかの方法を提供してあなたの考えを実現させることができます.Pythonはオブジェクト向けの言語をサポートしていることはよく知られています.Pythonの魔法の方法はPythonがオブジェクトに直面する上でよりよくできます.
魔法の使い方
魔法の方法はpythonの内部ですでに与えられていて、それは二重の下線に囲まれていて、いくつかの特定の時に自動的に呼び出されます
私たちはある魔法の方法を書き換えて、私たちが行う必要がある操作を定義することができて、この魔法の方法が自動的に呼び出された時も私たちが必要とする操作を完成しました
基礎魔法の方法(比較的よく使われる)
class h :
def __repr__(self):
return xxx
a = h()
a
xxx
class h :
def __str__(self):
return xxx
a = h()
xxxx
Print(a) xxx
ひかくオペレータ
__ lt__(self,other)符号より小さい動作を定義する:x
えんざんし
__ 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])power()によって呼び出された動作または**演算時の動作を定義する_lshift__(self,other)ビット左シフトの動作を定義する:<_rshift__(self,other)ビット右シフトの動作を定義する:>>_and__(self,other)ビット単位と操作の動作を定義する:&_xor__(self,other)ビット別または操作の動作を定義する:^_or__(self,other)ビット単位またはアクションの動作を定義します:|
ぎゃくえんざん
__ radd__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rsub__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rmul__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rtruediv__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rfloordiv__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rmod__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rdivmod__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rpow__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rlshift__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rrshift__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_rxor__(self,other)被演算オブジェクト(左の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される_ror__(self,other)被演算オブジェクト(左側の操作オブジェクト)がこの演算をサポートしていない場合に呼び出される
インクリメンタル付与演算
__ 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)ビット単位の値を割り当てる動作を定義します:&=_ixor__(self,other)ビット別に値を割り当てる動作を定義します:^=_ior__(self,other)ビット単位または操作に値を割り当てる動作を定義します.|=
一元オペレータ
__ neg__(self)正号の動作を定義する:+x_pos__(self)マイナス記号の動作を定義する:-x_abs__(self)abs()によって呼び出されたときの動作を定義する_invert__(self)ビットによる反転を定義する行為:~x
タイプ変換
__ complex__(self)complex()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)_int__(self)int()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)float__(self)float()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)round__(self[,n])round()によって呼び出されたときの動作を定義する(適切な値を返す必要がある)
__ index__(self)
コンテキスト管理(with文)
カスタムコンテナ
可変コンテナのカスタマイズに定義が必要な場合len__および_getitem__メソッド可変コンテナを定義する必要がある場合_len__および_getitem__方法はあと_setitem__および_delitem__方法
例可変カスタムリストをカスタマイズし、各要素がアクセスされた回数を記録する必要があります.
class mylist:
del __init__(self,*args):
self.values = [x for x in args] # *args
#(x for x in args) ,,,
self.count = {}.fromkeys(range(len(self.values)),0)
def __len__(self):
return len (self.values)
def __getitem__(self,key):
self.count[key] += 1
return self.values[key]