如何保持类的一致性?

问题描述

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

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 = [] ,所以它从一个deck 对象变成了一个列表对象?

解决方法

我在您的 populate_deck 方法中看到的只是添加到甲板列表的附加列表:

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

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

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

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

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

当您将花色和价值存储在甲板上时,您应该将卡片添加到您的甲板上。因此,使用 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