Pythonの関数説明 property()

property() は、Pythonの組み込み関数ではなく、プロパティ(property)を作成するためのビルトイン関数であり、プロパティを定義する際に使用されます。プロパティは、オブジェクトの属性へのアクセスを制御し、属性に対するゲッター(getter)やセッター(setter)を定義するために利用されます。

property() 関数の基本的な構文は以下の通りです:

python
property(fget=None, fset=None, fdel=None, doc=None)
  • fget: プロパティのゲッター(getter)関数を指定します。これはプロパティの値を取得するために呼び出されます。
  • fset: プロパティのセッター(setter)関数を指定します。これはプロパティの値を設定するために呼び出されます。
  • fdel: プロパティのデリータ(deleter)関数を指定します。これはプロパティを削除するために呼び出されます。
  • doc: プロパティに関するドキュメンテーション文字列を指定します(オプション)。

以下は
property() 関数を使用してプロパティを定義する例です:

python
class Circle:
    def __init__(self, radius):
        self._radius = radius

    def get_radius(self):
        return self._radius

    def set_radius(self, value):
        if value < 0:
            raise ValueError("Radius cannot be negative")
        self._radius = value

    def area(self):
        return 3.14 * self._radius ** 2

    # プロパティを定義
    radius = property(get_radius, set_radius)

# プロパティを使用
circle = Circle(5)
print(circle.radius)  # ゲッターが呼び出されて半径を取得
circle.radius = 7    # セッターが呼び出されて半径を設定
print(circle.area())  # メソッドを使用して面積を計算

この例では、
Circle クラス内で
radius プロパティを定義し、ゲッターとセッターを設定して、半径を制御しています。プロパティを介して半径にアクセスできるため、値の制約やカスタム動作を実装することができます。

property() 関数の主な特徴と注意点:

  • プロパティのカスタマイズ:
    property() 関数を使用することで、オブジェクトの属性へのアクセスをカスタマイズできます。ゲッター、セッター、デリータを定義することで、属性に対する操作を制御できます。

  • ドキュメンテーション文字列:
    doc パラメータを使用してプロパティに関するドキュメンテーション文字列を設定できます。これにより、プロパティの説明や使用方法をドキュメンテーションできます。

  • アンダースコア
    _ の使用: よく見られる慣習として、プロパティのバックエンドとしてアンダースコアで始まる名前を使用します(例:
    _radius)。これは、プロパティとそのバックエンドの区別を付けるためです。

プロパティを使用することで、オブジェクトの属性に対する操作を柔軟に制御できます。プロパティを定義することで、属性へのアクセス時にバリデーションやカスタム動作を追加できます。