2

'supみんな、

私は数日以内に試験前にいつものランダムな小さなプログラムをやっていて、5枚のカードドローポーカーを書くことにしました。単にコードで少し遊ぶためのものなので、基本的なクラスからは何も継承しませんでした。私のデッキにはリスト属性が含まれており、簡単な読みやすさと機能に必要な機能が与えられています。

import random

from card import Card

class Deck():

    def __init__(self):
        self.cards = self.__generate_cards()
        random.shuffle(self.cards)

    def __str__(self):
        cards_str = ""
        for card in self.cards:
            cards_str += str(card)
        return cards_str

    def __getitem__(self,index):
        return self.cards[index]

    def __generate_cards(self):
        cards = []
        for i in range(4):
            for j in range(13):
                cards.append(Card(i,j+1))
        return cards

    def pop(self,index):
        return self.cards.pop(index)

ご覧の.__iter__とおり、メソッドが見つかりません。つまり、Deck()オブジェクトを反復処理できません。Pythonは私に別の話を示しています。何らかの理由で、次のコードはカードオブジェクトをループし、self.cards実際にカードを印刷しますiterator

deck = Deck()
for card in deck:
    print(card)    # cards have a __str__ method

Pythonの魔法の一部であり、オブジェクトにループの可能性を与える場合を除いて、私にはあまり意味がありません。; p誰かがこれで私に光を見せてもらえますか?前もって感謝します!

4

1 に答える 1

2

クラスで__getitem__を定義すると、Pythonで反復可能になるのはなぜですか?

これは下位互換性のあるものです。それを__getitem__反復可能にします。

于 2012-08-20T20:55:10.703 に答える