Pythonのクラスメンバのスコープまとめ

  • 117
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Advent CalendarのPythonが過疎気味なので、昨日に引き続き何か簡単なネタを書こうと思います。

以前にまとめたPythonのクラスメンバのスコープまとめ紹介します。

具体的には、パブリックなメンバとメソッド、プライベートなメンバとメソッドの記述方法とアクセス方法です。

# coding: utf-8

class Widget(object):

    # コンストラクタ
    def __init__(self, r, l):

        # 通常メンバ変数
        self.rval = r
        self.lval = l

        # プライベート変数
        self.__secret = 5

    # publicクラスメンバ変数
    classVal = 30

    # プライベートクラス変数
    # 外からは特別な記述でないとアクセスできない
    __SecretClassVal = 10

    # 通常メソッド
    def Calc(self):
        # ここでもメンバ変数を定義できる。
        self.top = 10
        return self.rval * self.lval * self.top

    # プライベートメソッド
    def __MyCalc(self):
        print "This is Private Method!"

    # クラスメソッド.
    @classmethod
    def SelfName(cls):
        # ここでもクラスメンバ変数の定義ができる。
        cls.number = 1

    # プライベートクラスメソッド.
    @classmethod
    def __PrivateSelfName(cls):
        print "This is Private Class Method!"

if __name__ == '__main__':

    # コンストラクタと通常メソッドの呼び出し。
    w = Widget(2, 4)

    # メンバ変数へのアクセス
    w.lval = 3
    w.rval = 4

    # プライベートメンバ変数にアクセス。
    # インスタンス._クラス名__変数名でアクセスできる。(推奨されない)
    print w._Widget__secret

    # パプリッククラス変数へアクセス。
    # インスタンス名でもクラス名でもどちらでもアクセス可能。
    print Widget.classVal
    print w.classVal

    # プライベートクラス変数にアクセス。
    # インスタンス._クラス名__変数名でアクセスできる。(推奨されない)
    print w._Widget__SecretClassVal

    # 通常のメソッドの呼び出し.
    print w.Calc()

    # プライベートメソッドの呼び出し(推奨されない)
    print w._Widget__MyCalc()

    # クラスメソッドの呼び出し.
    Widget.SelfName()

    # プライベートクラスメソッドの呼び出し(推奨されない)
    print w._Widget__PrivateSelfName()

 
`
 5
 30
 30
 10
 120
 This is Private Method!
 None
 This is Private Class Method!
 None