カテゴリ: Python 更新日: 2026/03/05

Pythonのプロパティ(@property)の使い方!初心者でもわかるゲッター・セッター入門

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

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

生徒

「Pythonでクラスを使っていると、変数を直接触っていいのか不安になります…」

先生

「その気持ちは大切ですね。Pythonには、変数を安全に扱うための仕組みがあります。」

生徒

「安全に扱うって、どういうことですか?」

先生

@propertyを使うと、変数を読むとき・変更するときをコントロールできます。順番に見ていきましょう。」

1. Pythonのプロパティ(@property)とは?

1. Pythonのプロパティ(@property)とは?
1. Pythonのプロパティ(@property)とは?

Pythonのプロパティとは、クラスの中にある変数を、直接触らせずに安全に扱うための仕組みです。プログラミングでは、クラスの中にある変数を「属性」と呼びますが、この属性をそのまま変更できると、意図しない値が入ってしまうことがあります。

@propertyを使うと、見た目は普通の変数のように扱いながら、内部では処理を挟むことができます。これにより、初心者でも安心してクラス設計ができるようになります。

2. なぜゲッター・セッターが必要なのか

2. なぜゲッター・セッターが必要なのか
2. なぜゲッター・セッターが必要なのか

ゲッターとは「値を取得するための処理」、セッターとは「値を変更するための処理」です。例えば年齢を表す変数に、マイナスの数が入ってしまうとおかしいですよね。こうした不正な値を防ぐために、セッターでチェックを行います。

初心者の方は「直接代入すればいいのでは?」と思いがちですが、プログラムが大きくなるほど、こうした安全装置がとても重要になります。

3. @propertyを使わない場合の例

3. @propertyを使わない場合の例
3. @propertyを使わない場合の例

まずは、プロパティを使わないシンプルなクラスを見てみましょう。この例では、年齢を直接変更できてしまいます。


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

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

このように、問題のある値でもそのまま代入できてしまいます。これが後々のバグの原因になります。

4. @propertyを使ったゲッターの基本

4. @propertyを使ったゲッターの基本
4. @propertyを使ったゲッターの基本

次に、@propertyを使って値を取得する方法です。これにより、変数を読むときに処理を挟めます。


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

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

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

20

変数名の前にアンダースコアを付けているのは、「直接触らないでほしい」という合図です。

5. セッターを実装して安全に値を変更する

5. セッターを実装して安全に値を変更する
5. セッターを実装して安全に値を変更する

次はセッターです。セッターを使うと、値を変更するときに条件チェックができます。


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 = -3
user.age = 25
print(user.age)

年齢は0以上にしてください
25

6. プロパティは「変数のように使える」のが強み

6. プロパティは「変数のように使える」のが強み
6. プロパティは「変数のように使える」のが強み

プロパティの大きな特徴は、使う側から見ると普通の変数と同じように見えることです。メソッドのように呼び出す必要がないため、コードが読みやすくなります。

初心者の方でも、「中では処理が動いているけれど、外からはシンプル」という設計を体験できます。

7. 別の例:名前の文字数をチェックする

7. 別の例:名前の文字数をチェックする
7. 別の例:名前の文字数をチェックする

最後に、別パターンの例です。名前が空文字にならないようにチェックします。


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

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

    @name.setter
    def name(self, value):
        if value == "":
            print("名前は空にできません")
        else:
            self._name = value

person = Person("太郎")
person.name = ""
person.name = "花子"
print(person.name)

名前は空にできません
花子

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

@propertyは少し書き方が独特なので、最初は難しく感じます。しかし「値を読む」「値を変更する」という二つの場面を分けて考えると理解しやすくなります。

直接変数を触らせないことで、クラスの中身を守る。この考え方が、オブジェクト指向の大切なポイントです。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python のオブジェクト指向の記事一覧へ
新着記事
New1
Claude
ClaudeにPHPデバッグを相談するコツ!原因候補を仮説に分けて確認する質問例
New2
Python
PythonのCLIで対話型メニューを作る方法(prompt_toolkit)
New3
ChatGPT
ChatGPTでPHPコードを理解する方法!読めない処理をわかりやすく質問しよう
New4
PHP
PHP の定数(define, const)を使った設定方法を徹底解説!
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.3
Java&Spring記事人気No3
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.4
Java&Spring記事人気No4
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作
No.5
Java&Spring記事人気No5
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
Pythonのシェルスクリプトを自動実行する方法(cron & Task Scheduler)
No.7
Java&Spring記事人気No7
Claude
ClaudeにPHPリファクタリングを相談するコツ!目的・前提・制約を仕様メモにまとめるコツ
No.8
Java&Spring記事人気No8
PHP
PHPのMVCパターンを完全解説!初心者でもわかるModel・View・Controller