2

伙计们,

几天之内,我只是在考试前做我通常的随机小程序,我决定写一张五张抽牌扑克。因为它只是为了玩一点代码,所以我没有从基本类继承任何东西。我的卡片组包含一个列表属性,该属性已被赋予简单的可读性和功能所需的功能:

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 回答