非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Python – クラスの基本(コンストラクタ/メソッド/デストラクタ)

   

Pythonはオブジェクト指向プログラミングをサポートしている言語なので使わない手はありません。

JavaやC#のような完全オブジェクト指向ではなく、非オブジェクト指向とごちゃまぜで使えるのでC++に近いです。

広告

こちらがクラスの基本形です。

class MyClass:
    # コンストラクタ
    def __init__(self):
        self.name = ""
        self.age = 0

    # デストラクタ
    def __del__(self):
        print("さようなら")

    def getInfo(self): 
        return self.name, self.age

    def setInfo(self, name, age): # setName()メソッド
        self.name = name
        self.age = age

myclass = MyClass() # インスタンスを生成
myclass.setInfo("Yamada", 21)
print(myclass.getInfo())

del myclass #デストラクタ
print(myclass.getInfo()) #エラー
 

 

以下、解説です。

メソッド

メソッドの定義は基本的に関数と同じですが、引数の一番最初にselfを記述する必要があります。

def メソッド名(self, 引数1, 引数2): 
    #メソッドの定義
 

 

selfは、C#やJavaのthisと同じようなものでクラス自身を表しています。引数の最初にありますが第一引数ではありません。

 

コンストラクタ

こちらがコンストラクタになります。必ず __init__(self) というメソッド名を使うことでコンストラクタになります。

def __init__(self, 引数1, 引数2):
    #コンストラクタの定義
 

 

メソッドと同様に引数の一番最初にselfを記述します。

JavaやC#と異なる点は、インスタンス変数を定義することなく頭にself.を付けて定義した変数は自動的にインスタンス変数となる点です。

コンストラクタ内に限らずメソッド内で定義してもインスタンス変数になり得ます。ちょっと危険な匂いがしますが見失わないよう注意が必要ですね。

個人的には必ずコンストラクタ内で定義するようにしています。

デストラクタ

Pythonにはデストラクタを定義できます。

オブジェクトを消去したいときに呼び出して後処理などを行なえるものです。C++にはありますがC#やJavaにはありません。

def __del__(self):
    #デストラクタの定義
 

 

クラスの使い方

クラスは以下のように使います。引数で定義しておいたselfは無視します。

myclass = クラス名(引数1, 引数2) # インスタンスを生成
myclass.メソッド名(引数1, 引数2) # メソッド呼び出し
del myclass #デストラクタ
 

 

広告

 - Python