クラスとは??
クラスとは、オブジェクト思考で用いられる重要な概念です。詳しくは以下をご覧ください


言葉の整理(java vs python)
java | python |
・フィールド クラスが持つ変数のこと |
・アトリビュート クラスが持つ変数のこと |
・メソッド 修飾子 戻り値の型 メソッド名(){} |
・メソッド def メソッド名: |
・コンストラクタ インスタンス生成に用いる |
・コンストラクタ インスタンス生成に用いる |
・クラス 修飾子 class class名{} |
・クラス class クラス名: |
・インスタンス 型 変数名 = new コンストラクタ名(); |
・インスタンス 変数名 = クラス名(); |
クラスの定義とアクセス
クラスを定義するときは class キーワードを利用します。メソッドの定義には def を利用しますが、第一引数にはインスタンスオブジェクトが渡されます。この引数には self という名前を使うのが慣習です。
クラス定義
1 2 |
class クラス名: #クラスの処理内容 |
アトリビュート定義
1 2 3 4 5 |
class test1: a = 0 #test1のアトリビュート def __init__(self, b, c): self.d = b #test1のアトリビュート e = c #一時的な変数でアトリビュートではない(ローカル変数) |
ローカル変数
1 2 3 4 5 6 7 8 |
local_val = 1 def test_func(an_arg): local_val = an_arg print("test_func()の中", local_var) tmp = test_func(200) #出力:200 print("test_func()の外", local_val) #出力:1 |
インスタンスにアクセスする
インスタンス名.アトリビュート名でアクセスすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class test2: a = 0 def __init__(self, b, c): self.d = b e = c Test2 = task2(1,2) #インスタンスからアトリビュートにを取り出す num = Task2.a print(num) #出力:1 #アトリビュートを書き換える Task2.c = 100 num = Task2.c print(num) #出力:100 |
アトリビュートメソッドの隠蔽(カプセル化)
クラス内の内部だけで利用するアトリビュートやメソッドを隠して、外部から利用できなくすることをオブジェクト思考の用語でカプセル化といいます。pythonでは、アトリビュートやメソッドの名前の前に”_”をつけます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Spam: __attr = 100 def __init__(self): self.__attr = 999 def method(self): self.__method() def __method(self): print(self.__attr) spam = Spam() spam.method() #OK spam.__method() #NG spam.__attr #NG |
・”_”が0つ:public →クラスの外部からでも書き換え可能
・”_”が1つ: →クラスの外部からは書き換えができなくなる
・”_”が2つ:private → クラスの外部からは直接アクセスできなくなる
クラス定義の例
1 2 3 4 5 6 7 8 9 10 |
class MyClass: def _init_(self, width, height, depth): self.value = 0 self.width = width self.height = height self.depth = depth print("This is _init_() method !") def content(self): return self.width * self.height * self.depth |
pythonのメソッドの第1引数の名前は習慣的に「self」にするようになってます。selfはただの引数なので、thisでもmeでもコードは動きますが、可読性を失うためにselfを使用しましょう。
よく知りたい方に向けて クラスを確認してください。