Python でゲッターとセッターを作成する
- Python のゲッターとセッター
- 関数を使用して Python でゲッターとセッターを作成する
-
property()
関数を使用して Python でゲッターとセッターを作成する -
@property
デコレータを使用して Python でゲッターとセッターを作成する
プログラミング パラダイムであるオブジェクト指向プログラミング (OOP) は、構成可能性から継承まで、多くのことを簡単に作成し、機能の構築やパーツのプログラミングをより迅速に行うことを可能にします。 このパラダイムにはさまざまな機能があります。 2つは getter
と setter
です。
OOP の基盤であるクラスには、多くの場合、各インスタンスに固有の変数があり、これらの変数 (プロパティと呼ばれることが多い) は、メソッドを介して設定または取得されます。 これらのメソッドは getter
および setter
と呼ばれます。
これらの動作は、OOP をサポートするプログラミング言語で一般的であり、Python もサポートしています。 この記事では、Python で getter
と setter
を作成する方法について説明します。
Python のゲッターとセッター
ゲッターとセッターは、直接アクセスせずにクラス変数またはプロパティを設定するのに役立つメソッドであり、抽象化とカプセル化の目的を無効にします。 したがって、getter
と setter
を使用すると、クラス プロパティを操作できます。
getter
と setter
を作成する前に、他のプログラミング言語とは異なり Python には隠しフィールドがない ことを知っておくことが重要です。そのため、ドット表記を介してクラス内の変数に直接アクセスできます。
通常の関数、property()
関数、および @property
デコレータを使用して getter
と setter
を実現できます。
関数を使用して Python でゲッターとセッターを作成する
メソッドと呼ばれる典型的なクラス関数は、getter
と setter
を作成するのに便利で、self
の概念を使用して簡単に設定できます。
このメソッドは getter
のプロパティを返し、setter
の場合、メソッドは引数をプロパティにバインドします。 紹介するために、position
プロパティを保持する Employee
、getPosition
と呼ばれる getter
メソッド、setPosition
と呼ばれる setter
メソッドを使用します。
class Employee:
def __init__(self) -> None:
self.position = None
def getPosition(self):
return self.position
def setPosition(self, position):
self.position = position
Jacob = Employee()
Jinku = Employee()
Jacob.setPosition("Engineer II")
Jinku.setPosition("Senior Engineer")
print(Jacob.position)
print(Jinku.getPosition())
出力:
Engineer II
Senior Engineer
ただし、このセットアップまたはアプローチには、それほど特別な動作はありません。
property()
関数を使用して Python でゲッターとセッターを作成する
いくつかの特別な動作を取得するには、プロパティ オブジェクトを作成して返す property()
関数 を利用できます。このオブジェクトには、getter()
、setter()
、および delete() の 3つのメソッドがあります。
.
インスタンス属性へのインターフェースを提供するのに役立ちます。 この機能により、すべての getter
および setter
機能を簡単に作成できます。
property()
関数を使用するには、高階関数である property()
を作成する関数である 4つの引数値を設定する必要があります。
getter
、setter
、および delete
メソッドはその引数 (すべてオプション) であり、プロパティ オブジェクトを返します。
property(fget, fset, fdel, doc)
OOP コードで property()
関数を使用してみましょう。
class Employee:
def __init__(self):
self.position = None
def getPosition(self):
return self.position
def setPosition(self, position):
self.position = position
pos = property(getPosition, setPosition)
Jacob = Employee()
Jinku = Employee()
Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"
print(Jacob.position)
print(Jinku.position)
出力:
Engineer II
Senior Engineer
property()
関数の導入により、プライベート プロパティへのアクセスを安全に保つのに役立つプロパティ オブジェクトを保持する pos
バインディングがあります。
@property
デコレータを使用して Python でゲッターとセッターを作成する
@property
デコレータ を使用して property()
関数を実装できます。これにより、メソッド内で get
および set
の名前を使用する必要がなくなります。
@property
デコレーターを使用すると、getter
および setter
関数を定義する position
名を再利用できます。
@property
を使用して getter
を作成し、@position.setter
を使用して setter
を作成します。これは、print
ステートメントをコードに追加して出力内に表示することで明らかです。
class Employee:
def __init__(self):
self.position = None
@property
def position(self):
print("Get Employee Position: ")
return self._position
@position.setter
def position(self, value):
print("Set Position")
self._position = value
Jacob = Employee()
Jinku = Employee()
Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"
print(Jacob.position)
print(Jinku.position)
出力:
Set Position
Set Position
Set Position
Set Position
Get Employee Position:
Engineer II
Get Employee Position:
Senior Engineer
クラスインスタンスが呼び出されたときに最初の position
プロパティを設定する __init__
メソッドのため、4つの Set Position
があり、最初の 2つにつながります。 次の 2つの値をそれぞれの値に設定すると、再度出力されます。
getter
の場合、プロパティ値を取得するときに Get Employee Position
ステートメントを出力し、getter
は 2 回だけ呼び出されます。 したがって、2つのステートメント。
setter
メソッドを使用すると、OOP コードに検証を追加できます。
class Employee:
def __init__(self):
self.position = None
@property
def position(self):
print("Get Employee Position: ")
return self._position
@position.setter
def position(self, value):
print("Set Position")
if value != None and len(value) <= 2:
raise ValueError("Position name is less than two and is deemed invalid")
self._position = value
Jacob = Employee()
Jinku = Employee()
Jacob.position = "OS"
Jinku.position = "Senior Engineer"
print(Jacob.position)
print(Jinku.position)
出力:
Set Position
Set Position
Set Position
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 20, in <module>
Jacob.position = "OS"
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 14, in position
raise ValueError("Position name is less than two and is deemed invalid")
ValueError: Position name is less than two and is deemed invalid
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn