1

我有一个甲板类,我从中创建一个甲板对象:

class Deck:
  cards = []

deck = Deck()

如何使卡片组对象在调用时返回卡片列表?

print(deck)

# or

for card in deck:
  # do

不必总是调用deck.cards?

4

3 回答 3

9

您可以__iter__在类中定义Deck

class Deck:
    def __init__(self):
        self.cards = [1, 2, 3]

    def __iter__(self):
        for i in self.cards:
            yield i


deck = Deck()
for card in deck:
    print(card)

而这个印刷品:

1
2
3
于 2020-11-18T14:04:27.100 回答
2

此外,__iter__(self):您还可以使用__call__(self):. deck但是,对于后者,您必须将括号附加到deck().

什么是最好的实际上取决于您的应用程序/代码的上下文。

class Deck:
    cards = [1, 2, 3]

    def __call__(self):
        return self.cards

deck = Deck()

print(deck())

输出:[1, 2, 3]

for card in deck():
  print(card)

输出:

1
2
3

我在这里研究了 dunder 方法:Python Dunder 方法。作者写道,使用单独的类方法通常更好,因为它们更具体。

也许您可以提供更多关于为什么要使用deck而不是deck.cards.

于 2020-11-18T14:34:38.400 回答
0

嗯,有一个办法:

import jsons


class Deck:
    cards = ['card_1', 'card_2', 'card_3']


deck = Deck()

dict_temp = jsons.dump(deck)
print(dict_temp['cards'])

=>
['card_1', 'card_2', 'card_3']
于 2020-11-18T14:10:38.510 回答