有没有一种方法可以访问python对象列表中的特定属性?

时间:2019-07-22 10:54:32

标签: python python-3.x

好吧,不久前开始学习python,然后自己又开始学习有关OOP的知识,然后他们告诉我写一个二十一点游戏。现在,我为每张卡制作了对象,并将所有这些对象放在列表中以模拟卡片组。我很难弄清楚如何从该列表中的每个项目中干净地返回一个特定的属性。

我最初只是尝试打印,但后来我意识到我认为这件事比实际要聪明,这是一个问题。 Python是一门好语言,我确信工具在那里。我只是还不知道

class Card:
    def __init__(self, face, suit, value):
        self.face = face
        self.suit = suit
        self.value = value

ACES = Card("Ace","Spades",10)
TWOS = Card(2,"Spades",2)
THRS = Card(3,"Spades",3)
FOUS = Card(4,"Spades",4)
FIVS = Card(5,"Spades",5)
SIXS = Card(6,"Spades",6)
SEVS = Card(7,"Spades",7)
EIGS = Card(8,"Spades",8)
NINS = Card(9,"Spades",9)
TENS = Card(10,"Spades",10)
JACS = Card("Jack","Spades",10)
QUES = Card("King","Spades",10)
KINS = Card("Queen","Spades",10)

deck = [ACES,TWOS,THRS,FOUS,FIVS,SIXS,SEVS,EIGS,NINS,TENS,JACS,QUES,KINS]

print (deck.face)

事后看来,我应该意识到代码会认为我要求列表本身提供一个属性,而不是列表中的项目,但是我很困惑。

5 个答案:

答案 0 :(得分:1)

  

事后看来,我应该意识到代码会认为我需要列表本身的属性,而不是列表中的项目

实际上,代码不会“思考”,只会执行代码。而且运行时也不会“思考”,它只是执行提供的代码。但是撇开那些细微的概念上的细微差别,您的诊断是对的:deck.facedeck(列表)对象本身上查找名为“ face”的属性。

如果您的问题是“如何为face中的每张卡打印(或收集或使用deck属性),则简单的解决方案是在列表上进行迭代:

for card in deck:
    print(card.face)

,或者如果您要构建face值的列表:

faces = [card.face for card in deck]

现在,如果这是面向对象设计中的一项练习,则您可能需要重新考虑使用list来代表“甲板”对象-牌组实际上不是list

答案 1 :(得分:0)

由于卡片组列表中的每个元素都是Card Object,因此您需要对列表进行迭代并获得如下所示的face属性:

faceList = []
for obj in deck:
  faceList.append(obj.face)

print (faceList)

答案 2 :(得分:0)

您可以轻松使用list-comprehension

deck = [ACES,TWOS,THRS,FOUS,FIVS,SIXS,SEVS,EIGS,NINS,TENS,JACS,QUES,KINS]

deck_faces = [card.face for card in deck]
print(deck_faces)

这给出了:

['Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'King', 'Queen']

答案 3 :(得分:0)

我认为使用字典是一个很好的解决方案,字典可以使您甚至保留字符串作为遍历列表的键,这是您可以做的

position:sticky

依此类推,然后您可以通过直接查询“ ACES”卡来访问它,例如:cards_dict={"ACES": Card("Ace","Spades",10), "TWOS": Card(2,"Spades",2)}

或者您可以这样做

cards_dict["ACES"]

然后,您可以使用面孔名称直接查询卡片,例如:cards_dict = {d.face: d for d in deck}

答案 4 :(得分:0)

只需对所有它们使用for循环

for card in deck:
    print(card.face)

deck[0].face

针对特定项目