如何访问列表成员的属性AKA AttributeError:'list'对象没有属性'name'

时间:2017-07-15 01:33:53

标签: python

我刚刚开始使用Python,当我尝试访问列表中对象的name属性时,我收到此错误。

在第一段代码中,我可以打印我的Card类的name属性:

    while nextcard<=53:
        thisCard=Card()
        thisCard=thisCard.init_card(nextcard)
        base_deck.append(thisCard)
        print(base_deck[nextcard].name)
        nextcard+=1

我还有一个名为Deck的类,它有一个名为cards的列表属性。当我尝试使用以下代码

打印列表中特定卡的名称时出现错误
    testDeck=Deck()
    if testDeck.d_count==42:
        testDeck.name="four player 500"
        testDeck.cards=[]
        testDeck.cards.append(base_deck[4:14])
        testDeck.cards.append(base_deck[17:27])
        testDeck.cards.append(base_deck[29:40])
        testDeck.cards.append(base_deck[42:53])
        print(testDeck.cards[2].name)
        nextcard=0

任何建议都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

据我所知,您的主要问题是您要将名单附加到testDeck.cards,而不是附加单张卡。列表没有.name()方法,因此您会收到错误。

让我们看一个简化的例子。我们创建了一个简化的basedeck,包含四个项目。

>>> bd = []
>>> bd.append(1)
>>> bd.append(2)
>>> bd.append(3)
>>> bd.append(4)
>>> print(bd)
[1, 2, 3, 4]

然后我们创建一个简化的卡片列表。当我们尝试从basedeck追加切片时,追加函数会将每个切片附加为原子单元:基本上创建一个包含子列表的列表,而不是我想要的那样,列出个别元素

>>> cards = []
>>> cards.append(bd[0:2])
>>> cards.append(bd[2:4])
>>> print(cards)
[[1, 2], [3, 4]]

要将切片作为单个元素添加到列表中,您可以使用 .extend()方法。

In [14]: cards2 = []
    ...: cards2.extend(bd[0:2])
    ...: cards2.extend(bd[2:4])
    ...: print(cards2)
    ...:
[1, 2, 3, 4]

希望这有帮助。