python

【python】クラス

クラスとは??

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

【入門】オブジェクト指向のメリットオブジェクト指向の特徴 特徴:オブジェクト指向言語=プログラム作成する時に物(オブジェクト)として考えてプログラミングをする言語のこと...
【入門】クラスの基本構造用語の整理 フィールド ・フィールドとメソッドを合わせてメンバという。 ・クラスブロック内に宣言された変数のこと ・this.フ...

言葉の整理(java vs python)

java python

・フィールド

クラスが持つ変数のこと

・アトリビュート

クラスが持つ変数のこと

・メソッド

修飾子 戻り値の型 メソッド名(){}
public int calc(){/*処理*/}

・メソッド

def メソッド名:
/*処理*/

・コンストラクタ

インスタンス生成に用いる
コンストラクタ名はclass名()

・コンストラクタ

インスタンス生成に用いる
コンストラクタ名は_init_()

・クラス

修飾子 class class名{}
public class Main{/*クラスの内容*/}

・クラス

class クラス名:
*/クラスの処理*/

・インスタンス

型 変数名 = new コンストラクタ名();

・インスタンス

変数名 = クラス名();

クラスの定義とアクセス

クラスを定義するときは class キーワードを利用します。メソッドの定義には def を利用しますが、第一引数にはインスタンスオブジェクトが渡されます。この引数には self という名前を使うのが慣習です。

クラス定義
class クラス名:
    #クラスの処理内容
アトリビュート定義
class test1:
    a = 0  #test1のアトリビュート
    def __init__(self, b, c):
      self.d = b #test1のアトリビュート
      e = c #一時的な変数でアトリビュートではない(ローカル変数)
ローカル変数
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
インスタンスにアクセスする

インスタンス名.アトリビュート名でアクセスすることができます。

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では、アトリビュートやメソッドの名前の前に”_”をつけます。

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 → クラスの外部からは直接アクセスできなくなる

クラス定義の例
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を使用しましょう。

よく知りたい方に向けて クラスを確認してください。