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