環境設定
プログラム作成
クラス
tkinter
|
PythonクラスPython のクラスについて,説明します. 目次はじめにクラスの例変数Python のクラスには,クラス変数とインスタンス変数に二種類が有ります.クラス変数はクラスによって決まっている値で,インスタンスが異なっても同じ値です.一方,インスタンス変数はクラスが同じでも,インスタンス毎に値が異なります. クラス変数クラス定義中のトップレベルで作成された変数をクラス変数と言います.クラス変数は,クラスが同じインスタンスでは,同じ値になります.クラス変数は,クラス名.変数名で値の呼び出しや代入ができます.また,オブジェクトに同じ名前が無い場合には,インスタンス名.変数名で値の呼び出しができます.しかし,値の変更はできません.なぜならば,インスタンス名.変数名 = 値とした時点で,インスタンスの名前空間に新たなオブジェクトができるからです.Python では,変数に値が代入された時点でオブジェクトが作成される—というルールです.以下のプログラムで,これらのことを確認します. クラス変数の説明用プログラム(class_variable.py) 001 #!/usr/bin/python3 002 003 class ExClass: 004 txt = "" 005 num = float("nan") 006 007 if __name__ == "__main__": 008 hoge = ExClass() 009 fuga = ExClass() 010 011 ExClass.txt = "Pi" # Class variable 012 ExClass.num = 3.141592653589793 # Class variable 013 print("1: ", hoge.txt,"\t", hoge.num) 014 print("2: ", fuga.txt,"\t", fuga.num) 015 print("3: ", ExClass.txt,"\t", ExClass.num, "\n") 016 017 hoge.txt = "eular" # New instance variable 018 hoge.num = 2.718281828459045 # New instance variable 019 print("4: ", hoge.txt,"\t", hoge.num) 020 print("5: ", fuga.txt,"\t", fuga.num, "\n") 021 022 ExClass.NewVar = 1.234567 # New cals variable 023 print("6: ", hoge.NewVar) 024 print("7: ", fuga.NewVar) 025 print("8: ", ExClass.NewVar) このプログラムを実行すると,以下の結果が得られます.プログラムは 007 行目から実行されます.008 行目でインスタンス hoge が作成されます.と同時に,004 と 005 行目クラス変数 (txt, num) のオブジェクトが作成されます.009 行目でインスタンス fuga が作成されます.011 と 012 行目でクラス変数に値が代入されます.013 と 014 行目でクラス変数が表示されます.これは,インスタンス (hoge, fuga) の名前空間に変数 (txt, num) のオブジェクトが無いので,上位のクラスが検索されそこにあるクラス変数が表示されます.015 行目も同じクラス変数を表示します.ここまでは,3つのオブジェクト (hoge.txt, fuga.txt, ExClass.txt) は全く同じメモリー上の値 Pi を指し示しています.同様に,3つのオブジェクト (hoge.num, fuga.num, ExClass.num) も全く同じメモリー上の値 3.141592653589793 を指し示しています.017 行目では,インスタンス hoge に変数オブジェクト txt を作成し,値を代入します.018 行目でも,変数オブジェクト num を作成し,値を代入します.017 と 018 行目で作成されたオブジェクトの名前空間は,インスタンス hoge のツリーに属します.そのため,019 行目では検索パスの最初に見つかるインスタンスの変数が表示されます.一方,020 行目のインスタンス fuga には txt と num が無いので,上位のツリーのクラスオブジェクトが検索され,そこの変数の値が表示されます.022 行目では新たなクラス変数が作成されます.023 – 025 行目でそれが表示されます.検索パスは異なりますが,最終的には同じオブジェクトが抽出されます. 1: Pi 3.141592653589793 2: Pi 3.141592653589793 3: Pi 3.141592653589793 4: eular 2.718281828459045 5: Pi 3.141592653589793 6: 1.234567 7: 1.234567 8: 1.234567 インスタンス変数クラス定義中のメソッドの内側で作成された変数をインスタンス変数と言います.インタンス変数はオブジェクト毎に値を持ち, メソッド内では self.変数名 で操作します.self でなくても良いのですが,慣習で self を使います.以下のプログラムにはひとつのクラス変数とインスタンス変数が有ります.また,クラスから二つのインスタンスを作成します.ここではインスタンス変数の取り扱い方を示します. インスタンス変数の説明用プログラム(instance_variable.py) 001 #!/usr/bin/python3 002 003 class ExClass: 004 variable = -99999 005 def __init__(self, x): 006 self.variable = x 007 008 def set(self, x): 009 self.variable = x 010 011 def get(self): 012 return self.variable 013 014 if __name__ == "__main__": 015 hoge = ExClass(3.141592653589793) 016 fuga = ExClass(2.718281828459045) 017 print("1: ", hoge.get()) 018 print("2: ", fuga.get(), "\n") 019 020 hoge.set(1.234) 021 fuga.set(4.321) 022 print("3: ", hoge.get()) 023 print("4: ", hoge.get(), "\n") 024 025 hoge.variable = 123456789 026 fuga.variable = 987654321 027 print("5: ", hoge.variable) 028 print("6: ", fuga.variable, "\n") 029 030 print("7: ", ExClass.variable) このプログラムを実行すると,以下の結果が得られます.プログラムは 014 行目から実行されます.015 行目でインスタンス hoge が作成され,006 行目で hoge のインスタンス変数 variable に 3.141592653589793 が代入されます.016 行目でインスタンス fuga が作成され,006 行目で fuga のインスタンス変数 variable に 2.718281828459045 が代入されます.017 – 018 行目でそれぞれのインスタンス変数を表示します.020 – 023 行目では,クラスのメソッド(関数)を使いインスタンス変数を操作します.025 – 028 行目で示すように,インスタンス名.変数名 で,インスタンス変数の操作も可能です.030 行目はおまけで,クラス変数を表示します.これは初期値のままです. 1: 3.141592653589793 2: 2.718281828459045 3: 1.234 4: 1.234 5: 123456789 6: 987654321 7: -99999 ページ作成情報参考資料
更新履歴
|