求助:基于Python Data Class实现电影角色打印程序的问题
解决Python Dataclass实现电影角色类的问题
问题分析
你的代码存在几个关键问题:
@dataclass定义的字段默认是必填项,无法直接创建空实例Character.Character()- 未实现主程序中调用的
set_name/set_kind/set_planet方法 - 缺少格式化输出的
to_string方法 - 额外的
char函数没有实际作用
修正后的Character类代码
将以下代码保存为 Character.py:
from dataclasses import dataclass @dataclass class Character: # 给字段设置默认空字符串,支持空实例化 name: str = "" kind: str = "" planet: str = "" # 实现setter方法 def set_name(self, name: str): self.name = name def set_kind(self, kind: str): self.kind = kind def set_planet(self, planet: str): self.planet = planet # 实现格式化输出方法 def to_string(self) -> str: # 处理a/an的语法:元音开头用an,否则用a article = "an" if self.kind.lower()[0] in {'a', 'e', 'i', 'o', 'u'} else "a" return f"{self.name} is a(n) {self.kind} from {self.planet}"
验证主程序运行
你的主程序代码无需修改,运行后会输出:
Indiana is a(n) Human from Earth Luke Skywalker is a(n) Human from Tatooine
补充说明
- 给dataclass字段设置默认值后,既支持直接传参创建实例,也支持空实例化后通过setter赋值
to_string方法中加入了a/an的语法判断,让输出更符合自然语言习惯- dataclass会自动生成
__init__、__repr__等基础方法,无需手动编写
内容的提问来源于stack exchange,提问作者toby lead
相关产品推荐
相关产品推荐

