• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Python / PythonのPrivate変数とProtected変数(_variable)とPrivate変数(__variable)について詳細

PythonのPrivate変数とProtected変数(_variable)とPrivate変数(__variable)について詳細

1 Public, Protected, Private変数のそれぞれの宣言方法
2 Public変数の具体的な使い方
3 Protected変数の具体的な使い方
4 Private変数の具体的な使い方
5 関連記事

Public, Protected, Private変数のそれぞれの宣言方法

PythonのProtected変数は_(アンダースコア)が1つのもので、Private変数は_(アンダースコア)が2つのものである。

Public変数、Protected変数、Private変数には、それぞれ以下の特徴がある。

それぞれ、定義は以下のように行う。

Example

  • 一般的な変数の定義(public変数)
class Person:
    def __init__(self, name, age):
        self.name=name
        self.age=age

 

  • Protected変数(アンダースコアを1つつける)
class Person:
    def __init__(self, name, age):
        self._name=name # _を1つつける
        self._age=age # _を1つつける

 

  • Private変数(アンダースコアを2つつける)
class Person:
    def __init__(self, name, age):
        self.__name=name # _を2つつける
        self.__age=age # _を2つつける

Public変数の具体的な使い方

Public変数には、クラス内、継承先、クラス外のインスタンスから直接アクセスすることができる

外部から自由にアクセスして変更することができるため利用には注意が必要で、外部から直接アクセスしない変数にはPublic変数を設定しない。

以下のように、Public変数は、クラス内、子クラス、インスタンスからアクセスできる。

Example

  • Public変数の具体的な使い方

class Human:
    msg = "Hello" # Publicクラス変数
    def __init__(self, name, age):
        self.name = name
        self.age = age # Publicインスタンス変数
    def print_msg(self):
        print("{} name = {}, age = {}".format(self.msg, self.name, self.age))# Public変数にクラス内からアクセスできる

class SubHuman(Human):

    def print_all(self):
        print(self.msg, self.name, self.age) # 継承した子クラスでもpublic変数にはアクセスできる

### クラスの外 ###
taro = Human("Taro", 20)
jiro = Human("Jiro", 18)

print(taro.name) # クラス外からもアクセスできる
jiro.name = "suburo" # Public変数は直接編集できる

Protected変数の具体的な使い方

一般的に、Protected変数には、クラス内とクラス自身と継承したクラスのみからアクセスできる
ただし、Javaなどの言語のProtected変数と異なり、pythonでは、クラスの外からでもProtected変数にアクセスできる。
そのため、Protected変数にはクラス外からは直接アクセスしないように実装する。
(Example参照)

Example

  • Protected変数の具体的な使い方
class Human:
    _msg = "Hello" # Protectedクラス変数
    def __init__(self, name, age):
        self._name = name
        self._age = age # Protectedインスタンス変数
    def print_msg(self):
        print("{} name = {}, age = {}".format(self._msg, self._name, self._age))# Protected変数にアクセス

### クラスの外 ###
taro = Human("Taro", 20)
jiro = Human("Jiro", 18)

print(taro._name) # クラス外からでもアクセスできるが、Protected変数ではクラス外からのアクセスは非推奨で、実装しないようにする

jiro._name = "suburo" # またProtected変数を直接編集することもできる

Private変数の具体的な使い方

Private変数はアンダースコアを2つ付けて作成する。
Private変数はクラスの中からしかアクセスできないようになっており、クラスの外からアクセスしようとするとエラーになる。
ただし、Private変数も、特殊な方法(インスタンス名._クラス名変数名__変数名とすると)でクラスの外からアクセスできる。

Example

  • Private変数の具体的な使い方
class Human:
    __msg = "Hello" # Privateクラス変数

    def __init__(self, name, age, gender):
        self.__name = name
        self.__age = age # Privateインスタンス変数
        self._gender = gender # Protectedインスタンス変数

    def print_msg(self):
        print("{} name = {}, age = {}".format(self.__msg, self.__name, self.__age))
        # クラスの中からはアクセスできる

### クラスの外 ###
taro = Human("Taro", 20, 'Man')
jiro = Human("Jiro", 18, 'Man')

print(taro.__name) # これだとアクセスできずエラーになる(AttributeError: 'Human' object has no attribute '__name')

print(taro._Human__name) # Private変数だが、このように実装するとクラス外からもアクセスできるが実装しないようにする

jiro._Human__name = "saburo" # Private変数の書き換えもできる

print(jiro._Human__name)
jiro._Human__msg = "GoodBye"
print(jiro._Human__msg)

  • 子クラスからのProtected, Private変数へのアクセス

class SubHuman(Human):
    def __init__(self, name, age, gender):
        super().__init__(name, age, gender)

    def print_name(self):
        print(self._gender) # Protected変数は継承先からも参照できる
        print(self.__name) # Private変数は、継承先だとこのままアクセスできずエラー

sample = SubHuman("Shiro", 24, "man")
sample.print_name()

以上、PythonのProtected変数とPrivate変数について紹介した。

関連記事

Pythonの型ヒント:コレクション型とOptional型の使い方
Pythonの型ヒント:コレクション型とOptional型の…
Python型ヒントについて、変数と関数の引数と戻り値に付与する基本的な書き方について
Python型ヒントについて、変数と関数の引数と戻り値に付与…
【まとめ】よく使うLinuxのショートカット11選
【まとめ】よく使うLinuxのショートカット11選
覚えておくべきLinuxコマンド50選
覚えておくべきLinuxコマンド50選
FlaskでFormを用いてPOSTリクエストを行い、送信された値を取得する
FlaskでFormを用いてPOSTリクエストを行い、送信さ…
Flaskでabortを用いてHTTPException例外を強制的に発生させる
Flaskでabortを用いてHTTPException例外…

Primary Sidebar

人気記事

  • 1
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 2
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 3
    Python未経験だが、フリーランスの案件に採用さ…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 Public, Protected, Private変数のそれぞれの宣言方法
2 Public変数の具体的な使い方
3 Protected変数の具体的な使い方
4 Private変数の具体的な使い方
5 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Python講座
【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。<strong>Pythonの基礎から生成AI活用</strong>...
詳細 ▶

Footer

利用規約