【问题标题】:How to maintain class consistency?如何保持类一致性?
【发布时间】:2020-12-19 01:49:28
【问题描述】:

我正在尝试用 python 编写一个基本的二十一点游戏。但是当我创建一个类对象时 例如 Card.card_1 或 Deck.deck_1 它们是 Class 对象,但是当我尝试将它们转移到另一个类时,例如 52 Card Objects 到 Deck 对象,它们似乎恢复为列表,从而否定了我的实例方法。有人能告诉我我错过了什么吗?

Card_Class.py

value = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
suit = ["Hearts", "Diamonds", "Clubs", "Spades"]

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

Deck_Class.py

import Card_Class
import random 

class Deck():
    def __init__(self):
        self.deck = []

    def populate_deck(self):
        for s in Card_Class.suit :
            for v in Card_Class.value:
                self.deck.append([s, v])
        return self.deck


    def get_card(self):
        return self.deck[0]

get_card 方法返回一个列表类型,尽管我的 self.deck = [] ,所以它已经从一个甲板对象变成了一个列表对象?

【问题讨论】:

    标签: python class inheritance generator


    【解决方案1】:

    当您在甲板上存储花色和价值时,您应该将卡片添加到您的甲板上。因此,使用 Card() 调用 Card 构造函数,并使用正确的 s 和 v 值如下:

    def populate_deck(self):
        for s in Card_Class.suit :
            for v in Card_Class.value:
                self.deck.append(Card_Class.Card(s, v))
        return self.deck
    

    【讨论】:

      【解决方案2】:

      我在你的populate_deck 方法中看到的只是一个附加到甲板列表的附加列表:

      self.deck.append([s, v])
      

      该行清楚地附加了一个包含当前花色和价值的列表。类型没有变化,唯一添加的是一些列表。所以你的self.deck 看起来像

      [["Hearts", "A"], ["Hearts", "2"], ["Hearts", "3"]]
      

      等等

      您可能打算使用其构造函数添加一个新的 Card 对象。

      self.deck.append(Card_Class.Card(s,v))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        相关资源
        最近更新 更多