__len__メソッド

スタック構造のデータを使用している時、スタックの長さを確かめたくなったので次のようにコードを書いてみた。

print(len(stack1))
# >> Error

結果はエラーだった。
単元4では、インスタンスは変数のように使えると言ったじゃないか!どうにかならないの?

というようなモチベーションでこの問題を解決していきたいと思う。

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):  # インスタンスに関数lenを使用されたときの処理
        return len(self.stack)  # 今回の処理では、インスタンス変数のstackを関数lenに適応させることにした
# 動作確認プログラム
stack1 = Stack()
print(len(stack1))
stack1.push(0)
stack1.push(1)
print(len(stack1))
0
[0]
[0, 1]
2

解説

  • __len__メソッドを使用することで関数lenの処理を定めることができる
  • def __len__(self): # インスタンスに関数lenを使用されたときの処理
        # 処理内容

コメント

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