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

Pythonのカプセル化とは?private変数・プロパティの実装方法を初心者向けに徹底解説

Pythonのカプセル化とは?private変数・プロパティの実装方法
Pythonのカプセル化とは?private変数・プロパティの実装方法

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

生徒

「Pythonのクラスで、直接さわってはいけない変数があるって聞いたんですが、本当ですか?」

先生

「本当です。Pythonでは、データを安全に守るためにカプセル化という考え方があります。」

生徒

「カプセル化って、なんだか難しそうですね……。」

先生

「大丈夫です。箱に入れて中身を勝手に触れないようにする、というイメージで考えてみましょう。」

1. Pythonのカプセル化とは何か?

1. Pythonのカプセル化とは何か?
1. Pythonのカプセル化とは何か?

Pythonのカプセル化とは、クラスの中のデータや処理を外から直接さわれないように守る考え方です。 プログラミング未経験の方には難しく聞こえるかもしれませんが、日常生活にたとえるととてもシンプルです。

例えば、テレビのリモコンを思い浮かべてください。私たちはボタンを押すだけで操作できますが、 中の電子回路を直接いじることはありません。これと同じように、 必要な操作だけを外に見せて、内部は隠すのがカプセル化です。

Pythonのオブジェクト指向プログラミングでは、 カプセル化を使うことで「間違った使い方」「予期しない変更」を防ぎ、 安全で読みやすいプログラムを作ることができます。

2. カプセル化が必要な理由

2. カプセル化が必要な理由
2. カプセル化が必要な理由

カプセル化が必要な理由は大きく分けて三つあります。

  • データを勝手に変更されないようにするため
  • プログラムのミスを減らすため
  • 後から修正しやすいコードにするため

例えば、年齢を管理するプログラムで、マイナスの数字が入ってしまったら困ります。 カプセル化を使えば、「正しい値だけを入れる仕組み」を作ることができます。 これがPythonのカプセル化の大きなメリットです。

3. Pythonのprivate変数とは?

3. Pythonのprivate変数とは?
3. Pythonのprivate変数とは?

Pythonには、private変数と呼ばれる仕組みがあります。 privateとは「個人的な」「内緒の」という意味で、 クラスの外から直接アクセスしない変数を表します。

Pythonでは、変数名の先頭にアンダースコアを付けることで表現します。 特に、先頭にアンダースコアを二つ付けたものをよく使います。


class User:
    def __init__(self, name):
        self.__name = name

この__nameがprivate変数です。 クラスの外から直接user.__nameのように使うことはできません。 これによって、データを守ることができます。

4. private変数を使うと何が起きるのか

4. private変数を使うと何が起きるのか
4. private変数を使うと何が起きるのか

private変数を使うと、クラスの外から直接データを変更できなくなります。 これは「触ってはいけない場所にフタをする」ようなものです。


user = User("太郎")
print(user.__name)

AttributeErrorが発生します

このように、エラーが出ることで「直接さわってはいけない」と教えてくれます。 これがPythonにおけるカプセル化の基本的な考え方です。

5. プロパティとは何か?

5. プロパティとは何か?
5. プロパティとは何か?

private変数を使うと便利ですが、 「値を取り出したい」「条件をチェックして変更したい」 という場面もあります。 そこで登場するのがプロパティです。

プロパティとは、 変数のように見えるけれど、中では処理が動いている仕組みです。 Pythonでは@propertyという書き方を使います。

6. プロパティの基本的な実装方法

6. プロパティの基本的な実装方法
6. プロパティの基本的な実装方法

次は、private変数とプロパティを組み合わせた例を見てみましょう。 名前を安全に扱うクラスです。


class User:
    def __init__(self, name):
        self.__name = name

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

これで、外からはuser.nameとして安全に値を取り出せます。 見た目は変数ですが、実際にはメソッドが動いています。

7. 値を変更するプロパティの書き方

7. 値を変更するプロパティの書き方
7. 値を変更するプロパティの書き方

プロパティは、値を変更するときにも使えます。 その場合は、@変数名.setterを使います。


class User:
    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

このようにすると、空の名前が入るのを防ぐことができます。 カプセル化によって「正しい使い方」だけを許可できるのです。

8. カプセル化は初心者にこそ大切

8. カプセル化は初心者にこそ大切
8. カプセル化は初心者にこそ大切

Pythonのカプセル化は、最初は少し難しく感じますが、 実は初心者にこそ大切な考え方です。

データを守り、ルールを決め、ミスを減らすことで、 プログラムは読みやすく、安心して使えるものになります。 private変数とプロパティは、その第一歩です。

Pythonのオブジェクト指向プログラミングでは、 カプセル化を意識するだけで、コードの品質が大きく変わります。 まずは「直接さわらせない」という意識から始めてみてください。

カテゴリの一覧へ
新着記事
New1
Python
Pythonのカプセル化とは?private変数・プロパティの実装方法を初心者向けに徹底解説
New2
Django
DjangoのClass-based View(CBV)の仕組みと強みを初心者向けにやさしく解説
New3
Flask
Flask×Celery×Dockerで本番運用する基本構成例を初心者向けにやさしく解説
New4
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.3
Java&Spring記事人気No3
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Python
Pythonで現在の日付・時刻を取得する方法(datetime.now() / today())
No.6
Java&Spring記事人気No6
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.7
Java&Spring記事人気No7
Django
Django settings.py の役割とよく使う設定を完全解説!初心者でもわかる基本と考え方
No.8
Java&Spring記事人気No8
Python
PythonのNoneとは?初心者にもわかるNoneTypeとnullの違いをやさしく解説!