Pythonクラスの雛型

Pythonでクラスを作成するとき、コメントの場所、スーパークラスのコンストラクタ呼び出し、デストラクタの名前、withに対応させるメソッド名など、いろいろ忘れてしまう。
雛型を作ろう。

Pythonクラス雛形

class MyClass(object):
    '''私の作るクラス。ここにクラスのコメントを記述する。
       このコメントがクラスの説明として表示される。
       objectを継承しているが、この記述は省略可能。
    '''

    def __init__(self, x, y):
        ''' コンストラクタ。ここにメソッドのコメントを記述する。

            Args:
                x (str): xxxx
                y (str): yyyy
        '''
        self.x = x
        self.y = y
        self.file1 = self.__open('file1.txt', 'a')
        self.file2 = None

    def __del__(self):
        '''デストラクタ。終了処理を書く。
           ただしクラス開放のタイミングはPython任せになる。
        '''
        self.file1.close()

    def __enter__(self):
        '''withブロックが開始した時に呼び出されるメソッド。
           ここでオープン処理を行う。
           selfをreturnする必要がある。
        '''
        self.file2 = self.__open('file2.txt', 'a')
        return self

    def __exit__(self, exc_type, exc_val, exc_th):
        '''withブロックが終了した時に呼び出されるメソッド。
           ここでクローズ処理を行う。
           引数を4つ取る必要がある。
        '''
        self.file2.close()

    def __open(self, filename, open_mode):
        ''' アンダースコア2つのメソッドは、外から呼べなくなる。
            プライベートメソッドを定義したいときはこうする。

            Args:
                filename (str): file nema.
                open_mode (str): file open mode.
            Returns:
                stream: file stream
        '''
        return open(filename, open_mode)

    def write(self, msg):
        ''' 通常の公開メソッド。引数の説明を書くと親切。

            Args:
                msg (str): メッセージ
        '''
        self.file1.write(msg + '\n')
        if self.file2:
            self.file2.write(msg + '\n')

    def __str__(self):
        '''str()したときに呼ばれるメソッド。
           インスタンスを単純にプリントした時に表示されるので、
           デバッグ時に役立つ。
        '''
        return 'X[{}] Y[{}]'.format(self.x, self.y)

    def __repr__(self):
        '''repr()したときや、インタラクティブシェルで書き出した時に
           呼び出されるメソッド。
           eval()でオブジェクトになるように記述する。
           定義しておくとデバッグ時に役立つ。
        '''
        return '''MyClass('{}', '{}')'''.format(self.x, self.y)


class MyClassClass(MyClass):
    '''MyClassを継承したクラス
    '''

    def __init__(self, x, y, z):
        '''コンストラクタ。
        '''
        # スーパークラスのコンストラクタを呼び出す方法
        super(MyClassClass, self).__init__(x, y)
        self.z = z
    
    def __str__(self):
        return 'X[{}] Y[{}] Z[{}]'.format(self.x, self.y, self.z)
    
    def __repr__(self):
        return '''MyClassClass('{}', '{}', '{}')'''.format(
            self.x, self.y, self.z)

まとめ

これで次からクラスを作る度に調べる必要がなくなる。

同じタグの記事
同じカテゴリの記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA