1. ホーム 
  2. 備忘録 
  3. Python

クラス

クラスの定義

Python でクラスを定義する方法を以下に記載する

lesson.py

# クラスの作成方法1 推奨
class Person1(object):
    def say_hello(self):
        print('hello')


# クラスの作成方法2 Python3から (object) を省略可能になった
class Person2:
    def say_hello(self):
        print('hello')


# クラスの作成方法3 Python3から(object)を省略可能になったが()だけも可能
class Person3():
    def say_hello(self):
        print('hello')

クラスの初期化とクラス変数

クラス内に __init__ メソッドを作成すると、クラスの生成時に行いたい初期化処理を書くことができる

クラス内に定義される各メソッドは第一引数に自分自身のインスタンスを表す self を指定するが、この self は外部からメソッドを呼び出す際に設定する必要はない

メソッドに渡したいパラメタがある場合は、メソッド側は第二引数以降に設定し、外部から呼び出す際は self を除いた第二引数以降を渡してやればよい


また、クラス変数に値を設定する場合も self を通して設定する

クラスの初期化とクラス変数の例を以下に記載する

lesson.py

class Person(object):
    def __init__(self, name):
        self.name = name  # クラス変数の設定
        print(locals())  # {'self': <__main__.Person object at 0x000001D699F0FD00>, 'name': 'Mike'}

    def talk(self):
        print(f'I am {self.name}. hello!!')  # I am Mike. hello!!
        self.walk(3)  # self を通して自身のメソッドを呼び出すこともできる

    def walk(self, num):
        print('walking...' * num)  # walking...walking...walking...


# オブジェクトを生成
somebody = Person('Mike')  # __init__の第二引数に値を渡す
somebody.talk()  # self だけなので引数はいらない

コンストラクタとデストラクタ

コンストラクタは先述の通り __init__ メソッドを定義することで処理を記述できる

デストラクタは __del__ メソッドを定義することで処理を記述できる

クラスのコンストラクタとデストラクタの例を以下に記載する

lesson.py

class Person(object):
    def __init__(self):
        print('constructor...')

    def __del__(self):
        print('destructor...')


if __name__ == '__main__':
    # オブジェクトを生成
    print("--------")
    somebody = Person()
    del somebody
    print("--------")

# 結果
# --------
# constructor...
# destructor...
# --------