カテゴリ: 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は少し書き方が独特なので、最初は難しく感じます。しかし「値を読む」「値を変更する」という二つの場面を分けて考えると理解しやすくなります。

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

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

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

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
PythonでREST APIを作る方法!初心者向けFastAPI入門|Python API開発の基本
New2
PHP
PHPのコード品質向上ツール完全解説!PHPStan(ピーエイチピースタン)とPHPCS(ピーエイチピーシーエス)で初心者でも安全にデバッグしよう
New3
Python
Pythonでデータベースのログを記録・監視する方法を完全解説!初心者向けデータベースログ管理入門
New4
PHP
PHPのログファイルを活用したエラートラッキング完全ガイド|初心者でもわかるPHPデバッグ入門
人気記事
No.1
Java&Spring記事人気No1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.2
Java&Spring記事人気No2
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.3
Java&Spring記事人気No3
Python
Pythonのインストール&環境構築!Windows・Mac・Linuxでの手順を初心者向けに解説
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.6
Java&Spring記事人気No6
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.7
Java&Spring記事人気No7
Python
Pythonでデータベースの接続プールを使う方法を徹底解説!初心者向けPythonデータベース接続プール入門
No.8
Java&Spring記事人気No8
PHP
PHPのPHPUnitを使った単体テスト完全ガイド!初心者でもわかるテストとデバッグ入門