オブジェクト指向の記述子パイソン
はじめに:
親愛なる小さな友達が、やるキュート()メソッド内のプロパティのpythonを覚えていますか?
Pythonでは、オブジェクトのアクセスクラスインスタンス属性は、オブジェクト名[例属性名]を介してアクセスすることができます。しかし、この操作の方法は、オブジェクト指向のカプセル化を破壊しますよ!このように、Pythonの激しい虎食事操作、プライベートアクセスタイプ属性は、オブジェクトをインスタンス化する()、セッター()メソッドの間接的なゲッターと呼ばれる私有財産へのその後のアクセスが設定されている二重下線属性とクラス名の前のことで。
しかし、オブジェクト名[属性名]方法のインスタンスではなく、使用ゲッター()、セッター()メソッドは、コードがより複雑で重くなります。したがって、プロパティかわいい()メソッド誕生しました!プロパティ()メソッドは非常に単純な、柔軟な属性アクセスクラスすることができます。それでは、内部のメカニズムは、プロパティ()メソッドを実装することはありますか?
-今日のヒーロー:記述子
1.コンセプトは:Pythonで、記述子は、特別なクラスです。この特定のクラスは、オブジェクトクラス共通の別のインスタンスのプロパティに割り当てることができます。
2.特別クラス:それはどちらかの方法が含まれています。
__ __get値(自己、例えば、所有者)は、プロパティ戻りプロパティにアクセスします
__set __(自己、例えば、値)操作属性の割り当てコール、何も返しません
何も返さない__delete __(自己、インスタンス)制御、削除操作
図3は示す-エッセンス・ディスクリプタ・クラス定義:
4の回路図-アプリケーション記述子-のPythonで実装プロパティメソッド
コードの例:
>>> class Myproperty:#定义一个描述符类Myproperty
def __init__(self,fget,fset,fdel):
self.fget = fget
self.fset = fset
self.fdel = fdel
def __get__(self,instance,owner):
return self.fget(instance)
def __set__(self,instance,value):
self.fset(instance,value)
def __del__(self,instance):
self.fdel(instance)
>>> class C:
def __init__(self):
self._x = None
def getX(self):
return self._x
def setX(self,value):
self._x = value
def delX(self):
del self._x
x = Myproperty(getX,setX,delX) #描述符类实例化对象指派给普通类C的属性x
>>> c = C()
>>> c.x = 'X-MAN'
>>> c.x
'X-MAN'
>>> c._x
'X-MAN'
>>>