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
相关产品推荐
相关产品推荐

