カテゴリ: 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のプロパティ(@property)の使い方!初心者でもわかるゲッター・セッター入門
New2
PHP
初心者向けPHP の MySQL のデータを更新する方法(UPDATE 文)完全ガイド
New3
Python
Pythonのif文の基本!条件分岐の書き方とelifの使い方
New4
Python
Pythonのリストを辞書に変換する方法(dict() / zip())
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.2
Java&Spring記事人気No2
Python
Pythonのダックタイピングとは?型チェックなしで動的に振る舞うOOP設計をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonで経過時間を計測する方法を完全解説!初心者でもわかる time.perf_counter() と time.sleep()
No.4
Java&Spring記事人気No4
Python
Pythonで一時ファイルを作成・管理する方法!初心者でもわかるtempfileモジュール入門
No.5
Java&Spring記事人気No5
PHP
PHP の可変変数と変数の参照渡しを完全解説!初心者でも理解できる動的変数の使い方
No.6
Java&Spring記事人気No6
Python
Pythonのセット(set)とは?リストや辞書との違いを解説
No.7
Java&Spring記事人気No7
PHP
PHPのJWT認証を完全ガイド!初心者でもわかるJSON Web Tokenの基本と安全な仕組み
No.8
Java&Spring記事人気No8
Python
Pythonでリストの全要素に処理を適用する方法(map() / lambda)