264
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
264
Help us understand the problem. What are the problem?