MOの気になることを適当に伝えるブログ

moNote

Python

Python - クラス変数

投稿日:

Python の クラスでの 変数などの説明

クラスは、インスタンス変数 と クラス変数 を持つことができます。

インスタンス変数

インスタンス変数は「インスタンス名.変数名」で利用し、インスタンス毎に独立の変数です。

class myClass:
    def __init__(self):
        self.name = ""     # インスタンス変数
       
m1 = myClass()
m1.name = "TARO"

m2 = myClass()
m2.name = "JIRO"

print(m1.name)
print(m2.name)
TARO
JIRO

クラス変数(static変数)

クラス変数は「クラス名.変数名」で利用し、すべてのインスタンスで共通の変数です。クラス変数はインスタンスを生成しなくても利用できます。

class myClass:
    team_namae = ""      # クラス変数

    def __init__(self):
        self.name = ""

myClass.team_namae = "JAPAN"   # インスタンスは無い

m1 = myClass()
m1.name = "TARO"

m2 = myClass()
m2.name = "JIRO"

print(m1.name)
print(m2.name)

print(myClass.team_namae)
TARO
JIRO
JAPAN

アクセス制限

private や protected などのアクセス修飾子はありません。

アンダーバー(_)で始まる変数や関数は外から参照しないという慣習的ルールがあります。アンダーバー2個(__)で始まる変数や関数は参照方法が違います。

class myClass:
    def __init__(self):
        self.name = "TARO"
        self._name = "JIRO"
        self.__name = "SABU"    # 

m = myClass()
print(m.name)               
print(m._name)                  # 参照できるが慣習的に参照しない
print(m._myClass__name)         # __name では参照できない。
TARO
JIRO
SABU

メソッド(関数)も同様

class myClass:
    def __init__(self):
        self.__name = "TARO"     
 
    def getName(self):
        return self.__name

    def _getName(self):
        return self.__name

    def getName(self):
        return self.__name
 
m = myClass()
print(m.getName())
print(m._getName())
TARO
TARO

コード入力中の IDEで補完はこんな感じ

-Python
-

Copyright© moNote , 2020 All Rights Reserved Powered by STINGER.