トッカンソフトウェア

Python クラス(Windows)

クラスをやります。


クラス

クラスはclassで定義します。
				
"""
テストプログラム
"""


# 継承元クラス
class BaseClass:

    # 初期化メソッド
    def __init__(self, arg1, arg2, arg3):
        self.aaa = arg1

        # このクラス外で使用すると警告(protectedのような扱い)
        self._bbb = arg2

        # このクラス以外で使用するとエラー(privateのような扱い)
        self.__ccc = arg3

    def show(self):
        print("show:" + self.aaa + " " + self._bbb + " " + self.__ccc)


# 継承先クラス
class ChildClass(BaseClass):

    # 初期化メソッド
    def __init__(self, arg1, arg2, arg3):
        BaseClass.__init__(self, arg1, arg2, arg3)

    def show2(self):

        # 継承元クラスのメソッドを呼び出し
        BaseClass.show(self)

    def show3(self):

        # ここではself._bbbの警告でない
        print("show3:" + self.aaa + " " + self._bbb)

cls = ChildClass("A", "B", "C")

# 親クラスのメソッドを呼び出し
cls.show()

# 子クラスのメソッドを呼び出し
cls.show2()
cls.show3()

# ここではself._bbbの警告がでる
print(cls.aaa + " " + cls._bbb)
print(cls.__dict__)


			
実行結果


コンストラクタにあたるもの(初めに呼ばれるメソッド)はクラス名ではなく、__init__になります。

メソッドの第一引数は自分自身になります。変数名は何でも良いのですが、慣例としてselfを付けます。
クラスの属性はこのselfに追加する形で定義します。
親クラスのメソッドを呼び出す場合、引数にselfを渡しますが、クラスの外からメソッドを呼ぶ場合、渡しません。

親クラスのメソッドを呼ぶ場合、クラス名.メソッド名(self,・・・)という形で呼びます。

クラスの属性に_(アンダーバー)を付けるとprotectedのようなものになります。
クラス外から呼び出すことは出来るのですが、以下の警告がでるようになります。
[pylint] W0212:Access to a protected member _bbb of a client class

クラスの属性に__(アンダーバー×2)を付けるとprivateのようなものになります。
そのままでは自身のクラス外ではそのままアクセスすることができません。属性の頭にクラス名が付くようになります。


ページのトップへ戻る