You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类中如何将实例变量映射到类字典并转换输入参数

调整后的Card类实现

没问题,我来帮你修改这个Card类,让它完全符合你的预期需求。咱们一步一步来看需要调整的地方:

主要修改点

  • 在__init__方法里,直接将用户输入的参数通过类里的suits和values字典转换成对应的全称,存储为实例变量(而不是存原始输入)
  • 修复get_value方法里的引用错误(原代码直接用values是找不到的,需要引用类属性或者实例属性)
  • 简化get_suit方法,同时让__str__方法直接使用已经转换好的实例变量

完整代码

class Card(object):
    '''This class sets up a playing card'''
    suits = {'d':'diamonds', 'h':'hearts', 's':'spades', 'c':'clubs'}
    values = {1:'Ace',2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, 10:10, 11:'Jack', 12:'Queen', 13:'King'}
    
    def __init__ (self, value, suit):
        # 先验证输入的合法性(可选,但能避免无效参数)
        if value not in self.values:
            raise ValueError(f"Invalid card value: {value}. Must be between 1-13")
        if suit not in self.suits:
            raise ValueError(f"Invalid card suit: {suit}. Must be one of 'd','h','s','c'")
        
        # 将输入转换为字典对应的全称,存储为实例变量
        self.value = self.values[value]
        self.suit = self.suits[suit]
    
    def get_value(self):
        # 现在实例变量已经是转换后的值,直接返回即可
        return self.value
    
    def get_suit(self):
        # 同理,直接返回转换后的花色全称
        return self.suit
    
    def __str__(self):
        # 直接用已经转换好的变量拼接字符串
        return f"{self.value} of {self.suit}"

测试验证

当你执行:

my_card = Card(1,'d')
print(my_card.get_value())  # 输出: Ace
print(my_card.get_suit())   # 输出: diamonds
print(my_card)              # 输出: Ace of diamonds

完全符合你的预期!

额外说明

如果之后你需要保留用户输入的原始参数(比如要获取原始的1或者'd'),可以在__init__里额外存储这些值,比如:

def __init__ (self, value, suit):
    # 保留原始输入
    self.raw_value = value
    self.raw_suit = suit
    # 转换后的变量
    self.value = self.values[value]
    self.suit = self.suits[suit]

这样既满足了当前的存储需求,也能灵活获取原始输入。

内容的提问来源于stack exchange,提问作者Chase Packer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:11:28