如何用return替代print实现Python Flower类输出?已尝试无输出
实现Flower类并解决输出问题
一、符合要求的Flower类实现
以下是带输入合法性校验、包含get/set方法的Flower类:
class Flower: def __init__(self, name: str, petal_count: int, price: float): # 初始化时校验输入合法性 if not isinstance(name, str): raise TypeError("名称必须为字符串类型") if not isinstance(petal_count, int) or petal_count < 0: raise ValueError("花瓣数量必须是非负整数") if not isinstance(price, float) or price < 0.0: raise ValueError("价格必须是非负浮点数") self._name = name self._petal_count = petal_count self._price = price # 获取花名 def get_name(self) -> str: return self._name # 设置花名(带校验) def set_name(self, name: str): if not isinstance(name, str): raise TypeError("名称必须为字符串类型") self._name = name # 获取花瓣数量 def get_petal_count(self) -> int: return self._petal_count # 设置花瓣数量(带校验) def set_petal_count(self, petal_count: int): if not isinstance(petal_count, int) or petal_count < 0: raise ValueError("花瓣数量必须是非负整数") self._petal_count = petal_count # 获取价格 def get_price(self) -> float: return self._price # 设置价格(带校验) def set_price(self, price: float): if not isinstance(price, float) or price < 0.0: raise ValueError("价格必须是非负浮点数") self._price = price # 返回花的信息字符串(替代print) def get_info(self) -> str: return f"花名: {self._name}, 花瓣数: {self._petal_count}, 价格: {self._price:.2f}" # 重写__str__,直接打印实例时自动调用 def __str__(self) -> str: return self.get_info()
二、用return替代print实现输出
核心逻辑是让类的方法只负责生成信息字符串并返回,输出操作交给外部代码完成:
# 示例用法 try: lily = Flower("百合", 20, 25.5) # 方式1:调用get_info获取返回值后打印 print(lily.get_info()) # 方式2:直接打印实例,自动触发__str__的返回值输出 print(lily) # 修改属性后再次输出 lily.set_price(28.0) print(lily.get_info()) except (TypeError, ValueError) as e: print(f"错误提示: {e}")
三、代码无输出的常见原因及解决
- 未实例化类或调用输出方法:只定义类但没创建实例、没调用
get_info()并打印,自然不会有输出。 - 调用return方法但未捕获返回值:如果只写
lily.get_info()而不写print(lily.get_info()),方法返回的字符串不会被输出。 - 输入非法未捕获异常:初始化或设置属性时输入不符合要求(比如给花瓣数传字符串),抛出异常但没加
try-except捕获,程序会直接终止,无法输出正常内容。
内容的提问来源于stack exchange,提问作者创死线代
相关产品推荐
相关产品推荐

