Python でゲッターとセッターを作成する

Olorunfemi Akinlua 2023年6月21日
  1. Python のゲッターとセッター
  2. 関数を使用して Python でゲッターとセッターを作成する
  3. property() 関数を使用して Python でゲッターとセッターを作成する
  4. @property デコレータを使用して Python でゲッターとセッターを作成する
Python でゲッターとセッターを作成する

プログラミング パラダイムであるオブジェクト指向プログラミング (OOP) は、構成可能性から継承まで、多くのことを簡単に作成し、機能の構築やパーツのプログラミングをより迅速に行うことを可能にします。 このパラダイムにはさまざまな機能があります。 2つは gettersetter です。

OOP の基盤であるクラスには、多くの場合、各インスタンスに固有の変数があり、これらの変数 (プロパティと呼ばれることが多い) は、メソッドを介して設定または取得されます。 これらのメソッドは getter および setter と呼ばれます。

これらの動作は、OOP をサポートするプログラミング言語で一般的であり、Python もサポートしています。 この記事では、Python で gettersetter を作成する方法について説明します。

Python のゲッターとセッター

ゲッターとセッターは、直接アクセスせずにクラス変数またはプロパティを設定するのに役立つメソッドであり、抽象化とカプセル化の目的を無効にします。 したがって、gettersetter を使用すると、クラス プロパティを操作できます。

gettersetter を作成する前に、他のプログラミング言語とは異なり Python には隠しフィールドがない ことを知っておくことが重要です。そのため、ドット表記を介してクラス内の変数に直接アクセスできます。

通常の関数、property() 関数、および @property デコレータを使用して gettersetter を実現できます。

関数を使用して Python でゲッターとセッターを作成する

メソッドと呼ばれる典型的なクラス関数は、gettersetter を作成するのに便利で、self の概念を使用して簡単に設定できます。

このメソッドは getter のプロパティを返し、setter の場合、メソッドは引数をプロパティにバインドします。 紹介するために、position プロパティを保持する EmployeegetPosition と呼ばれる 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つの引数値を設定する必要があります。

gettersetter、および 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 Akinlua avatar Olorunfemi Akinlua avatar

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

関連記事 - Python Property