Python のマジック メソッドは通常、次のようなメソッド名の形式で名前が付けられます: init (コンストラクター メソッド)、getitem、setitem (subscriptable に必要なメソッド)、delitem (del obj[key] に必要なメソッド)、len (len( に必要なメソッド) …)メソッド)など。
Python では、シーケンスやマッピングに似たクラスを作成したい場合、マジック メソッド getitem、setitem、delitem、len メソッドをオーバーライドすることでそれらをシミュレートできます。
マジックメソッドの機能:
getitem(self,key): キーに対応する値を返します。
setitem(self,key,value): 指定されたキーの値を設定します。
delitem(self,key): 指定されたキーに対応する要素を削除します。
len(): 要素の数を返します
コード例:
# coding:utf-8 ''' desc:尝试定义一种新的数据类型 等差数列 author:pythontab.com ''' class ArithemeticSequence(object): def init(self,start=0,step=1): print 'Call function init' self.start=start self.step=step self.myData={} # 定义获取值的方法 def getitem(self,key): print 'Call function getitem' try: return self.myData[key] except KeyError: return self.start+key*self.step # 定义赋值方法 def setitem(self,key,value): print 'Call function setitem' self.myData[key]=value # 定义获取长度的方法 def len(self): print 'Call function len' # 这里为了可以看出len的作用, 我们故意把length增加1 return len(self.myData) + 1 # 定义删除元素的方法 def delitem(self, key): print 'Call function delitem' del self.myData[key] s=ArithemeticSequence(1,2) print s[3] # 这里应该执行self.start+key*self.step,因为没有3这个key s[3] = 100 # 进行赋值 print s[3] # 前面进行了赋值,那么直接输出赋的值100 print len(s) # 我们故意多加了1,应该返回2 del s[3] # 删除3这个key print s[3] # 这里应该执行self.start+key*self.step,因为3这个key被删了
出力結果:
Call function init Call function getitem 7 Call function setitem Call function getitem 100 Call function len 2 Call function delitem Call function getitem 7
これらのマジック メソッドの原理は次のとおりです: クラスの属性項目に添え字を付けると、最初に getitem( )、setitem()、delitem() をインターセプトして、値の割り当て、コンテンツの変更、コンテンツの削除など、メソッドに設定した操作を実行します。
【関連おすすめ】
1. Pythonの特殊関数__len__(self)を深く理解する
2. マスターすべきヒント--Python lenのサンプルを詳しく解説4. Python の特殊クラスのメソッドの使用例チュートリアル
以上がPython の 4 つの魔法のメソッドの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。