← クエスト一覧

クエスト46:__len__と__getitem__を使おう

スライド 1 / 6
コーデ
💻 コード例
実行結果
← クエスト一覧
🐍 Python / Quest 46 / 85

クエスト46:__len__と__getitem__を使おう

発展 +10 XP
🏠
今回の課題
WordList クラスに __len____getitem__ を実装して、len() と for ループの両方で使えるようにしよう。
📖 解説を見る
📦 __len__ / __getitem__ って何?

この2つを実装すると、自作クラスを「リストのように」扱えます。__len__len() の、__getitem__obj[i]for の動きを決めます。

✏️ 書き方:
class Deck:
    def __init__(self, cards):
        self.cards = cards
    def __len__(self):
        return len(self.cards)
    def __getitem__(self, index):
        return self.cards[index]

d = Deck(['A', 'K', 'Q'])
print(len(d))
print(d[0])
 → 3 A
どちらも、中に持っているリストにそのまま任せているだけです。

📋 作るもの:
WordList クラスに、次の2つのメソッドを追加する
__len__(引数は self だけ)… self.words の個数を返す
__getitem__(引数は selfindex)… self.wordsindex 番目を返す
・両方そろうと len(wl)for word in wl の両方が動くようになる

💡 どこで使う?

独自のコレクション(ものの集まり)を作って、標準のリストと同じ感覚で使わせたいときに便利です。len(obj)for x in objobj[0] がそのまま効くので、使う人が新しい使い方を覚えずに済みます。

⚠️ ポイント:
__len__ は個数を return する
__getitem__ があると for でまわせる
ヒントを見る
どちらも中では self.words にそのまま任せればいいよ。__len__ は個数を、__getitem__ は index 番目の要素を return しよう。
期待する出力
3
Python
Java
Go
📄 見本
「答えを見る」を押すと、お手本のコードが出ます。クリックでコピーできます。
💻 コードエディタ
実行すると結果がここに表示されます
正解!見本と同じになりました。
次へ →
🏠 ホームへ

れんしゅうもんだい

☑ 0 / 3 正解 レッスンに戻る

全問正解でクエストクリア!

未挑戦

問題 1: NumberRange クラスに __len__ と __getitem__ を実装して 1〜5 を for で表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
1 2 3 4 5
未挑戦

問題 2: Matrix クラスで 2×2 行列 [[1,2],[3,4]] に __getitem__ を実装して [0][1] の値を表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
2
未挑戦

問題 3: Sentence クラスに __len__(単語数)と __getitem__(単語取得)を実装して len() と [1] を表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
3 love
コピーしました!