インスタンスを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__メソッドなど:比較ができるように振る舞う
コメント