LoginSignup
264
266

More than 3 years have passed since last update.

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

Last updated at Posted at 2013-12-05

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
264
266
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
264
266