0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】プロパティ(@property)の基本と使いどころ

Posted at

Pythonの @property デコレータについて学んだので、初心者としての視点でまとめてみます。
プロパティは「関数のような属性」といったイメージで、見た目は属性アクセスなのに、裏では関数が動いているという仕組みです。

つまり、「色々な処理をしたうえで、その最終的な値を属性のように呼び出したいときに property を使います」

プロパティとは?

プロパティとは、クラスの中で「値を使うとき・設定するとき・削除するとき」に、自動的に関数を実行できる仕組みです。

通常の変数アクセスのように書けるのに、裏では関数が呼び出されて、値のチェックや計算などができます。

基本の構文(getter/setter/deleter)

プロパティは次の3つの要素から成り立ちます:

  • @property:値を取得する関数(getter)
  • @xxx.setter:値を設定する関数(setter)
  • @xxx.deleter:値を削除する関数(deleter)

それぞれの xxx には、最初に @property を付けた関数名を使います。

実例:Personクラスで使ってみる

class Person:
    def __init__(self, name):
        self._name = name  # 内部変数は _ をつけるのが慣習

    @property
    def name(self):  # getter
        print("名前を取得します")
        return self._name

    @name.setter
    def name(self, value):  # setter
        print("名前を設定します")
        if not value:
            raise ValueError("名前を空にはできません")
        self._name = value

    @name.deleter
    def name(self):  # deleter
        print("名前を削除します")
        del self._name

実行例

p = Person("Taro")

print(p.name)     # getterが呼ばれる
p.name = "Jiro"   # setterが呼ばれる
del p.name        # deleterが呼ばれる
名前を取得します  
Taro  
名前を設定します  
名前を削除します

読み取り専用にしたい場合(getterだけ)

プロパティは、getterだけ定義すれば読み取り専用にもできます。

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

    @property
    def area(self):
        return 3.14 * self.radius ** 2
c = Circle(5)
print(c.area)     # OK(getterが呼ばれる)
c.area = 100      # エラー!setterが定義されていない

property() 関数を使う方法

デコレータを使わずに property() 関数で定義する方法もあります。

class Person:
    def __init__(self, name):
        self._name = name

    def get_name(self):
        return self._name

    def set_name(self, value):
        self._name = value

    def del_name(self):
        del self._name

    name = property(get_name, set_name, del_name)

この方法でも p.name のように使えます。

@xxx.setter/@xxx.deleter の補足

✅ 重要ルール:

  • @property で定義した関数名が name なら、
    • @name.setter@name.deleter必ず揃える必要があります
  • 関数名が一致していないとエラーになります

いつ使うの?

プロパティは以下のような場面で使えます:

やりたいこと プロパティの使い方
値をチェックしてから代入したい setter を使う
値を自動で計算したい getter を使う
読み取り専用にしたい getter だけ定義
値を削除するときにログを残したい deleter を使う

まとめ

  • @property を使うと、関数なのに属性のようにアクセスできる
  • getter/setter/deleter を組み合わせて、値の取得・設定・削除を制御できる
  • 属性のように見えて、裏では関数が動いている
  • 初心者にも分かりやすい構文で、安全なデータ管理ができる

今回はプロパティの基本について、自分の理解を整理するためにまとめてみました。
実際のコードでも使いながら、もっと自然に使えるようにしていきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?