カテゴリ: Python 更新日: 2026/01/29

Pythonのプロパティ(@property)の使い方!ゲッター・セッターの活用

Pythonのプロパティ(@property)の使い方!ゲッター・セッターの活用
Pythonのプロパティ(@property)の使い方!ゲッター・セッターの活用

先生と生徒の会話形式で理解しよう

生徒

「Pythonのクラスで、変数に直接アクセスしちゃダメって聞いたんですが、どうしてですか?」

先生

「直接触れると、思わぬ値が入ってしまうことがあるからです。その対策としてプロパティという仕組みがあります。」

生徒

「プロパティって難しそうです……。初心者でも使えるんですか?」

先生

「考え方はとてもシンプルです。箱のフタを開ける役割だと思って、順番に見ていきましょう。」

1. プロパティとは何か

1. プロパティとは何か
1. プロパティとは何か

Pythonのプロパティとは、クラスの中の変数を安全に読み書きするための仕組みです。正式には@propertyデコレータを使って作ります。

プログラムでは、データをそのまま外から自由に変更できる状態は危険です。例えば、年齢にマイナスの数が入ってしまうと、正しい処理ができなくなります。

プロパティは「変数に直接触っているように見せながら、実際にはチェック付きで操作する」ための仕組みです。

2. ゲッターとセッターの考え方

2. ゲッターとセッターの考え方
2. ゲッターとセッターの考え方

プロパティには、よく「ゲッター」と「セッター」という言葉が出てきます。

ゲッターとは「値を取り出す処理」のことです。セッターとは「値を設定する処理」のことです。難しい言葉ですが、やっていることは単純です。

ゲッターはフタを開けて中を見る役割、セッターはルールを確認してから中に入れる役割だと考えると分かりやすいです。

3. プロパティを使わない場合の問題点

3. プロパティを使わない場合の問題点
3. プロパティを使わない場合の問題点

まずは、プロパティを使わない例を見てみましょう。


class User:
    def __init__(self, age):
        self.age = age

user = User(20)
user.age = -5
print(user.age)

-5

このように、外から自由に値を変更できてしまいます。これでは、データの正しさを守れません。

4. @propertyを使った基本的な書き方

4. @propertyを使った基本的な書き方
4. @propertyを使った基本的な書き方

次に、プロパティを使った書き方です。変数の前にアンダースコアを付けるのが一般的です。これは「直接触らないでほしい」という合図です。


class User:
    def __init__(self, age):
        self._age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            print("年齢は0以上で入力してください。")
        else:
            self._age = value

user = User(20)
user.age = -5
print(user.age)

年齢は0以上で入力してください。
20

見た目はuser.ageと直接触っているように見えますが、裏ではチェック処理が動いています。

5. なぜ関数ではなくプロパティを使うのか

5. なぜ関数ではなくプロパティを使うのか
5. なぜ関数ではなくプロパティを使うのか

「それなら、get_ageやset_ageという関数でいいのでは?」と思うかもしれません。

プロパティの良い点は、使う側が「変数のように扱える」ことです。コードが自然で読みやすくなります。

将来、内部の仕組みを変えても、使う側の書き方を変えなくて済むのも大きなメリットです。

6. 読み取り専用プロパティ

6. 読み取り専用プロパティ
6. 読み取り専用プロパティ

セッターを書かなければ、読み取り専用のプロパティになります。外から値を変更されたくない場合に使います。


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

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

product = Product("りんご")
print(product.name)

りんご

この場合、product.nameに新しい値を代入しようとするとエラーになります。

7. 初心者が覚えておきたいポイント

7. 初心者が覚えておきたいポイント
7. 初心者が覚えておきたいポイント

プロパティは「データを守るための仕組み」です。最初は必要性を感じにくいですが、クラスが増えるほど重要になります。

すべての変数に使う必要はありません。「ルールを守ってほしい値」にだけ使えば十分です。

@propertyはPythonのオブジェクト指向プログラミングでとてもよく使われる考え方なので、意味を理解しておくことが大切です。

カテゴリの一覧へ
新着記事
New1
Flask
Flaskのログレベル(DEBUG/INFO/WARNING/ERROR)を使い分ける方法を完全ガイド!
New2
Python
Pythonのfrozensetとは?ミュータブルなsetとの違いをわかりやすく解説
New3
Python
Pythonでセットを活用してデータをフィルタリングする方法!初心者でもわかるセットの基本と使い方
New4
Python
Pythonの辞書操作まとめ!初心者が知っておくべき便利ワザ集
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.2
Java&Spring記事人気No2
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.3
Java&Spring記事人気No3
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.4
Java&Spring記事人気No4
Flask
Flaskで非同期処理を成功させるベストプラクティス集|初心者でも失敗しない考え方
No.5
Java&Spring記事人気No5
Django
Djangoモデル入門|初心者が最初に知るべきORMの基本操作
No.6
Java&Spring記事人気No6
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.7
Java&Spring記事人気No7
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.8
Java&Spring記事人気No8
Flask
Flaskのログをファイルに保存する方法!初心者でもわかる設定手順を徹底解説