基本的な特殊メソッドと__str__

特殊メソッド

Pythonではオブジェクトに対し何らかの操作をした際、特定の名前のメソッドが自動的に呼び出されることがあります。

たとえば、__init__なんかがそれに当たりますね。オブジェクト生成時に自動的に呼びだされます。

また、後述しますがprint関数を実行すると、__str__というメソッドが自動で呼びだされます。

このような特殊なメソッドのことを特殊メソッドと呼びます。

すべてのオブジェクトで利用可能な特殊メソッド

すべてのオブジェクトで利用可能な特殊メソッドについてです。

ここでは一部だけ紹介するものとし、個別の細かい説明は、次ページのオブジェクト同士の演算やプロトコルに関する記事にて説明します。

__repr__(self)

オブジェクト情報を表す文字列を返します。

__str__(self)

オブジェクトを文字列に変換して返します。

__bytes__(self)

オブジェクトをbyte型に変換して返します。

__format__(self,format_spec )

オブジェクトを書式指定文字列format_specに準じた文字列に変換して返します。

__hash__(self)

オブジェクトのハッシュ値を整数型で返します。

__bool__(self)

オブジェクト同士のブール演算を行う際に使用します。

__str__ オブジェクトの文字列表現

いろいろある特殊メソッドですが、まず抑えておくと役に立つものの一つが__str__でしょう。

__str__メソッドを実装したクラスのサンプルを見てみましょう。

class User():
    """
    ユーザークラス
    """

    def __init__(self, name="", age=0):
        self.name = name
        self.age = age

    def say_hello(self):
        print("Hello, my name is " + self.name)

    def __str__(self):
        return "name:" + self.name + " age:" + str(self.age)


user = User("Kuro", 30)

s = str(user)
print(s)
# name:Kuro age:30
# 

strの引数にUser型のオブジェクトを指定すると、__str__で実装した内容の文字列表現が取得できました。そして、前述の通りprint関数は内部的にstrを呼び出すため、上のコードはprint(user)としても同様の結果を得ることができます。

独自にクラス定義をする際は、デバッグやロギングの効率が上がるため__str__を実装するようにしたほうがよいでしょう。