Pythonのゲッターとセッター

Pythonのゲッターとセッター
目次

ゲッターとセッター

ロボ君

ゲッターとセッターメソッドは、主に隠蔽されたクラスのインスタンス変数にアクセスするために使用されマス。

ゲッター(getter)とセッター(setter)は、オブジェクトの属性に対して間接的なアクセスを提供し、属性の値の取得と設定に制御を加えるためのメソッドです。

  • ゲッターは、インスタンス変数の値を取得するためのメソッドです。
  • セッターは、インスタンス変数の値を設定するためのメソッドです。

ゲッターとセッターを使用すると、以下のようなメリットがあります。

  • インスタンス変数への直接的なアクセスを制限できます。
  • インスタンス変数の値を変更する前に、バリデーション(検証や確認)などの処理を実行できます。

ゲッター(getter)

  • ゲッターは属性の値を取得するメソッドです。通常、属性名の前に”get_”を付けます。
  • ゲッターを使用することで、属性値へのアクセスが制御され、属性値を外部から読み取る前に加工したり、検証したりすることができます。
   class MyClass:
       def __init__(self):
           self._my_value = 0

    # ゲッターメソッド
       def get_value(self):
           return self._my_value

セッター(setter)

  • セッターは属性の値を設定するメソッドです。通常、属性名の前に”set_”を付けます。
  • セッターを使用することで、属性値への代入が制御され、値を設定する前に検証や変換を行うことができます。
   class MyClass:
       def __init__(self):
           self._my_value = 0
   
       # セッターメソッド
       def set_value(self, new_value):
           if new_value >= 0:
               self._my_value = new_value

ゲッターとセッターの使用例

class Person:
    def __init__(self, name, age):
        self.__name = name  # プライベート変数(アンダースコア2つで始まる)
        self.__age = age

    # ゲッターメソッド(属性にアクセスするためのメソッド)
    def get_name(self):
        return self.__name

    def get_age(self):
        return self.__age

    # セッターメソッド(属性を設定するためのメソッド)
    def set_name(self, name):
        self.__name = name

    def set_age(self, age):
        if age >= 0:    # バリデーション
            self.__age = age
        else:
            print("年齢は正の値で設定してください。")

# カプセル化を使用した例
person1 = Person("Joe", 54)
print(person1.get_name())  # ゲッターメソッドを通じて名前を取得
print(person1.get_age())   # ゲッターメソッドを通じて年齢を取得

person1.set_age(-5)       # セッターメソッドを通じて年齢を設定(負の値を防ぐ)
print(person1.get_age())   # 年齢は変更されていない

person1.set_name("Real")    # セッターメソッドを通じて名前を変更
print(person1.get_name())   # 名前が変更された


# 実行結果
# Joe
# 54
# 年齢は正の値で設定してください。
# 54
# Real

このコードでは、Person クラス内の属性(__name__age)がプライベートとして定義されており、外部から直接アクセスできません。
代わりに、ゲッターメソッド(get_nameget_age)とセッターメソッド(set_nameset_age)を介して属性にアクセスと変更を行います。
これにより、属性の値を制御し、データの整合性を保つことができます。

りある

ゲッターとセッターを使うことで、意図しない属性の変更からシステムを守るってことか。

@propertyデコレータ

@property デコレータと @.setter デコレータを使用して、属性に対するゲッターとセッターを定義できます。
これにより、外部からは通常の属性のようにアクセスできます。@propertyデコレータを使用するとゲッターとセッターを簡潔なコードで書くことができます。

@propertyデコレータのゲッター

class MyClass:

    def __init__(self, name):
        self.__name = name

    @property    # ゲッターメソッド
    def name(self):
        return self.__name


my_class = MyClass("Real")    # my_classのインスタンス生成

print(my_class.name)          # インスタンスから属性ゲット!

# 実行結果
# Real

このコードでは、nameというインスタンス変数を定義しています。
nameインスタンス変数は、__nameというプライベート変数によって実装されています。
nameインスタンス変数へのアクセスは、@propertyデコレータによって定義されたnameゲッターメソッドを介して行われます。
nameゲッターメソッドは、__nameプライベート変数から値を取得し、それを返します。

@propertyデコレータのセッター

セッターは、インスタンス変数の値を設定するためのメソッドです。
@propertyデコレータのセッターは、@propertyデコレータのsetter属性を使用して定義します。

class MyClass:

    def __init__(self, name):
        self.__name = name

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, value):
        self.__name = value


my_class = MyClass("Joe")
print(my_class.name) 

# nameプロパティの値を変更します。
my_class.name = "Real"
print(my_class.name) 

# 実行結果
# Joe
# Real
ロボ君

ゲッターとセッターを使用することで、属性にアクセスする際に制約やバリデーションを簡単に実装でき、データの安全性と整合性を確保できマス。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次