1. 0xfffffff7

    Posted

    0xfffffff7
Changes in title
+Pythonのクラスメンバのスコープまとめ
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,93 @@
+Advent CalendarのPythonが過疎気味なので、昨日に引き続き何か簡単なネタを書こうと思います。
+
+以前にまとめたPythonのクラスメンバのスコープまとめ紹介します。
+
+```py
+# 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
+```