__str__ メソッド

インスタンスをprint文にいれるとどうなるだろう?

print(stack1)
# >> <__main__.Stack object at ○○○○○○○○○>

エラーではないがよくわからない文章が出力された。
(→ 実はメインプログラムのStackというクラスのインスタンスだということを表している)

こちらも任意の処理に変更してしまおう!

class Stack():
    def __init__(self):
        self.stack = []
    def push(self, arg1):
        self.stack.append(arg1)
        print(self.stack)
    def pop(self):
        value = self.stack[-1]
        del self.stack[-1]
        return value
    def __len__(self):
        return len(self.stack)
    def __getitem__(self, key):
        return self.stack[key]

# ----------ここから新規内容----------
    def __str__(self):  # インスタンスにprintやstrを使用されたときの処理
        return str(self.stack)  # 今回の処理では、インスタンス変数のstackを適応させることにした

str():文字列に変更する
# 動作確認プログラム
stack1 = Stack()
print(stack1)
stack1.push(50)
stack1.push(150)
print(stack1)
[]
[50]
[50, 150]
[50, 150]

インスタンスにprintを使用して、適当らしい出力を得ることができた!

解説

  • __str__メソッドを使用することでprint文や関数strに入ったときの処理を定めることができる
  • def __str__(self): # インスタンスにprintやstrを利用したときの処理
      # 処理内容

このように特殊なインスタンスメソッドを利用すると、インスタンスをより思い通りに処理させることができるぞ!

その他の特殊なメソッド

  • __init__メソッド:インスタンス変数の初期化
  • __str__メソッド :文字列のように振る舞う
  • __iter__メソッド:イテレータとのように振る舞う
  • __call__メソッド:関数のように振る舞う
  • __len__メソッド:シーケンスのように振る舞う
  • __getitem__メソッド:リストのように振る舞う
  • __setitem__メソッド:辞書のように振る舞う
  • __add__メソッドなど:数値のように振る舞う
  • __eq__メソッドなど:比較ができるように振る舞う

コメント

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