Python 对象返回一个列表

Posted

技术标签:

【中文标题】Python 对象返回一个列表【英文标题】:Python Object return a list 【发布时间】:2021-03-01 19:28:39 【问题描述】:

我有一个 Deck 类,我从中创建了一个 Deck 对象:

class Deck:
  cards = []

deck = Deck()

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

print(deck)

# or

for card in deck:
  # do

不必总是调用deck.cards?

【问题讨论】:

【参考方案1】:

你可以在Deck类中定义__iter__

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

【讨论】:

【参考方案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 Methods。作者写道,使用单独的类方法通常更好,因为它们更具体。

也许您可以提供更多背景信息,说明您为什么要使用 deck 而不是 deck.cards

【讨论】:

【参考方案3】:

嗯,有办法:

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']

【讨论】:

@MelvinAbraham,如果我错了,请纠正我,但我的解决方案中没有看到 deck.cards 的用法。谢谢! 您的答案可能没有错,但显然 OP 在迭代 card 时不想包含任何方法、属性等 另外,您的代码中可能有错字。而不是jsons,您的意思可能是json。最重要的是,它会在json.dump 行中引发错误。 @MelvinAbraham,它实际上是一个单独的模块,特性略有不同。如果您愿意,请查看。

以上是关于Python 对象返回一个列表的主要内容,如果未能解决你的问题,请参考以下文章

python基础--range

为啥 JSON 查询如果有一个元素则返回对象,如果有多个则返回列表?

Python 酸洗错误:TypeError:对象泡菜未返回列表。 numpy的问题?

python中的range函数

Python(67)_写函数,判断用户传入的对象(str,列表,元组)的每一个元素是否有为空,并返回

从列表和实例来了解python迭代器