Pythonの基本的な文法 - オブジェクト指向の記述子には、Pythonを示します

オブジェクト指向の記述子パイソン

はじめに:
親愛なる小さな友達が、やるキュート()メソッド内のプロパティの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'
>>> 
元の記事を公開 ウォンの賞賛0 ビュー9

おすすめ

転載: blog.csdn.net/qq_41252814/article/details/104347146