カテゴリ: 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
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
New2
Flask
Flaskアプリのセキュリティ対策まとめ!初心者向けに基本をやさしく解説
New3
Flask
FlaskでCookieを安全に使う方法!HttpOnly・Secureフラグの使い方を徹底解説
New4
Flask
Flaskで外部APIと連携する方法!requestsライブラリの使い方を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.3
Java&Spring記事人気No3
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.4
Java&Spring記事人気No4
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.5
Java&Spring記事人気No5
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.6
Java&Spring記事人気No6
Flask
Flaskで開発中にデータベースを初期化する方法!初心者でもわかる便利なTips
No.7
Java&Spring記事人気No7
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
No.8
Java&Spring記事人気No8
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本