【Python】__str__の意味と使い方。インスタンスの文字列表現を定義

みなさんこんにちは、ZeroTerasu(@ZeroTerasu)です。

表題の件、結論から申し上げますと、オブジェクトを文字列表現するためのメソッドです。

さらに言いますと、クラス内のメソッドとして使用されることが多く、その場合はクラスから生成されるインスタンスを文字列として表現するメソッドとして機能します。

今回も以前に使用した人間を生成するクラスclass Person()を使用して説明していきます。

このPerson()というクラスは、個別の人間を生成する設計図と考えて下さい。

このPerson()という設計図を基にして、TaroやHanakoのように個別の人が生成されます。この個別の人が生成されることをインスタンス化と呼び、生成される個別の人のことをインスタンスと呼びます。

実は、上記のように生成されたインスタンスを呼び出した際の返り値は、下記のように人間が理解しやすい表現では返してくれません。

class Person():
    def __init__(self, name, age, gender):
        self.myname = name
        self.myage = age
        self.mygender = gender

Taro = Person('Taro', 40, '男性')
Taro

# 実行結果
<__main__.Person at 0x14070dd1a90>

上記の実行結果からでは、Taroインスタンスがどのような情報を持っているか分かりません。

そのため、下記のようにprint関数で出力してやると情報を取得することができるようになります。

print(f'{Taro.myname}, {Taro.myage}, {Taro.mygender}')
# 実行結果
Taro, 40, 男性

上記のように都度print関数でオブジェクトの情報を取得することは面倒なので、__str__メソッドを定義することで、インスタンスの文字列表現が要求された場合に文字列として値を返すことが出来るようになります。

class Person():
    def __init__(self, name, age, gender):
        self.myname = name
        self.myage = age
        self.mygender = gender
    def __str__(self):
        return self.myname

Taro = Person('Taro', 40, '男性')
print(Taro)

# 実行結果
Taro

コメント

タイトルとURLをコピーしました