記述子プロトコル:
他のプログラミング言語では、記述子はsetterおよびgetterと呼ばれ、パブリック関数を使用してプライベート変数を取得および設定します。 Pythonにはプライベート変数の概念がなく、記述子プロトコルは、このようなことを実現するためのPythonの方法と考えることができます。記述子—これはPythonでクラスを実装する新しい方法であり、特定のオブジェクトから何も継承する必要はありません。 Pythonで記述子を簡単に実装するには、上記で定義したメソッドの少なくとも1つを使用する必要があります。以下のインスタンスは、属性によってアクセスされたオブジェクトを返し、所有者はハンドルが属性として割り当てられたクラスであることに注意してください。 Python記述子には、setter、getter、およびdeleteメソッドの3つのプロトコルがあります。
-
gfg .__ get __(self、obj、type = None)
:この属性は、情報(value = obj.attr)
を取得するときに呼び出され、返されるものはすべて—です。これは、属性値を要求したコードに渡されるものです。 -
gfg .__ set __(self、obj、value)
:このメソッドは、属性値を設定するために呼び出されます。 39;値')。何も返されません。 -
gfg .__ delete __(self、obj)
:このメソッドは、属性がオブジェクトから削除されたときに呼び出されます(del obj.attr)
記述子の呼び出し:
set()
メソッドまたは get()
メソッド。たとえば、 obj.gfg
は、 obj
ディクショナリでgfgを検索します。 gfgが__get __()
メソッドを定義している場合、 gfg .__ get __(obj)
。メソッド名で直接呼び出すこともできます。つまり、 gfg .__ get __(obj)
。
#Pythonプログラムを表示 #記述子の呼び出し方法 def __ getattribute __( self 、key): v = オブジェクト .__ getattribute __( self 、key) if hasattr (v、 `__get__` ): return cod e> v .__ get __( なし 、 self ) return v 覚えておくべき重要なポイント: - 記述子は、
__ getattribute __() メソッドによって呼び出されます。 -
__ getattribute__() をオーバーライドすると、記述子への自動呼び出しが防止されます。 -
object .__ getattribute __() およびtype .__ getattribute __() __ get __() へのさまざまな呼び出し。 - データ記述子は常にインスタンスディクショナリをオーバーライドします。
- 非データ記述子は、インスタンスディクショナリによってオーバーライドできます。
記述子の例: この例では、データ記述子は通常、値を設定して返し、アクセスをログに記録するメッセージを出力します。 コード1: class 記述子( オブジェクト ): def __ init __( self 、name = ``): self 。 name = name def __ get __( self 、obj、objtype): return "{} for {}" 。 format ( self .name、 self 。name) def __ set __( self 、obj、name): if isinstance (name、 str ): self 。 name = name else : raise TypeError( "名前は文字列である必要があります" ) クラス GFG( オブジェクト ): 名前 = 記述子() g = GFG() g.name = "Geeks" print (g.name) 終了: Python.Engineering コード2: < tbody> class 記述子( オブジェクト ): def __ init __( self 、name = ``): self 。 name = name def __ get __( self 、obj、objtype): return "{} for {}" 。 format ( self 。name、 self 。name) def __ set __( self 、obj、name ): if isinstance (name、 str ): self 。 name = name else : raise TypeError( "名前は文字列である必要があります" ) class GFG( オブジェクト ): 名前 = 記述子() g = GFG() g.name = "Computer" print (g.name) 終了: ComputerforComputer プロパティ()を使用してハンドルを作成します: property() を使用すると、任意の属性に使用できる記述子を簡単に作成できます。 property() プロパティを作成するための構文(fget = None、fset = None、fdel = None、doc = None) < table border = "0" cellpadding = "0" cellspacing = "0"> | #プロパティを説明するPythonプログラム( )function #アルファベットクラス class アルファベット: def __ init __( self 、value): self ._ value = value #値の取得、Äã‚Äã def getValue( se lf ): print ( `値の取得` ) return self ._ value #インストール値、Äã‚Äã def setValue( self 、value): print ( `値を`に設定 + value) self ._ value = value #remo 5つの値">自己 ): 印刷 ( `値を削除しています` ) del self ._ value value = プロパティ (getValue、setValue、delValue、) #値を渡す x = アルファベット( `GeeksforGeeks` ) print (x.value) x.value = `GfG` del x.value 終了: 値の取得Python.Engineering値のGfGへの設定値の削除 クラスメソッドを使用した記述子の生成: これで、クラスを取得し、記述子メソッドのいずれかをオーバーライドしてみましょう __ set__ 、 __ get__ 、および __ delete__ 。このメソッドは、型チェックなど、多くの異なるクラスや属性に同じ記述子が必要な場合に使用されます。 class 記述子( オブジェクト ): def __ init__( self 、name = ``): self .name = name def __ get __( self 、obj、objtype): return "{} for {}" 。 format ( self 。name、 self 。name) def __ set __( self 、obj、name ): if isinstance (name、 str ): self 。 name = name else : raise TypeError( "名前は文字列である必要があります" ) クラス GFG( オブジェクト ): 名前 = 記述子() g = GFG( ) g.name = "Geeks " print (g.name) 出力: Python.Engineering @propertyデコレータを使用して記述子を作成します: これでプロパティタイプメソッドとPythonデコレータの組み合わせであるプロパティデコレータの力を使用します。 class アルファベット: def __ init __( self 、value): self ._ value = value #値を取得することにより、、 @ property def value( self ): < / p> print ( `値の取得` ) return self ._ value #設定値、Äã‚Äã @ value 。セッター def value( self 、value): print ( `値を`に設定 + value) self ._ value = 値 #値を削除、Äã‚Äã @ value .deleter def value( self ): print ( `値の削除` ) del self ._ value #値を渡す x = アルファベット( `Peter` ) print (x.value) x.value = `Diesel` del x.value 終了: 値の取得Peter値をディーゼルに設定値を削除
Shop
Learn programming in R: courses $
Best Python online courses for 2022 $
Best laptop for Fortnite $
Best laptop for Excel $
Best laptop for Solidworks $
Best laptop for Roblox $
Best computer for crypto mining $
Best laptop for Sims 4 $
Latest questions
NUMPYNUMPY
psycopg2: insert multiple rows with one query
12 answers
NUMPYNUMPY
How to convert Nonetype to int or string?
12 answers
NUMPYNUMPY
How to specify multiple return types using type-hints
12 answers
NUMPYNUMPY
Javascript Error: IPython is not defined in JupyterLab
12 answers
Wiki
Python OpenCV | cv2.putText () method
numpy.arctan2 () in Python
Python | os.path.realpath () method
Python OpenCV | cv2.circle () method
Python OpenCV cv2.cvtColor () method
Python - Move item to the end of the list
time.perf_counter () function in Python
Check if one list is a subset of another in Python
Python os.path.join () method
| | | | |