为什么在我调用Fred.show_hand()时self.hand是一个空列表?

时间:2018-07-31 02:29:25

标签: python oop inheritance empty-list

为什么在代码末尾调用Fred.show_hand()时self.hand是一个空列表?我是OOP的新手,现在仍然想办法。我看着我的代码,很高兴。它不完整,但简单直观。我只是想不通这一件事。我的猜测是它与我不了解的继承有关。请对您的回答进行描述。我真的觉得我已经接近了解OOP(至少是基础知识)。

import random

class Card():

    def __init__(self, value, suit):
        self.value = value
        self.suit = suit

    def show_card(self):
        print(f'{self.value} of {self.suit}')


class Deck():

    def __init__(self):
        self.deck = []
        self.card_values = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
        self.card_suits = ['hearts', 'diamonds', 'clubs', 'spades']

    def build_deck(self):
        for value in self.card_values:
            for suit in self.card_suits:
                self.deck.append(Card(value, suit))

    def show(self):
        for card in self.deck:
            Card.show_card(card)

    def shuffle(self):
        random.shuffle(self.deck)

class Player(Deck):

    def __init__(self):
        super().__init__()
        self.hand = []

    def draw(self):
        return self.hand.append(self.deck.pop())

    def show_hand(self):
        print(f'You have {self.hand}')



d = Deck()
d.build_deck()
d.shuffle()
d.show()

fred = Player()
fred.draw()
fred.show_hand()

1 个答案:

答案 0 :(得分:1)

Playerself.deck方法中使用draw

此时(无self.deck.build_deck()self.deck为空。我的意思是self.deck类中的Player与您在播放器之前创建的Deck()不同。您应该在draw方法内部或之前的某个位置构建平台。或者在fred.deck.build_deck()之前做fred.draw()