如何打印Python类实例而非内存引用并输出属性与计算结果
自定义Pension类实例的打印内容,显示属性与养老金计算结果
要解决直接打印类实例显示内存引用的问题,只需在Pension类中重写__str__或__repr__方法,自定义打印时的输出格式,同时调用result方法计算退休储蓄。以下是具体修改方案:
1. 重写类的打印方法
在Pension类中添加__str__方法,定义实例被打印时的输出内容,包含所有属性和退休储蓄计算结果:
class Pension: def __init__(self, name, age, savings, growth): self.name = name self.age = age self.savings = savings self.growth = growth def result(self): amount = self.savings rate = 1 + (self.growth / 100) years = 65 - self.age return (amount * (1 - pow(rate, years))) / (1 - rate) # 重写__str__方法,自定义打印内容 def __str__(self): # 列出所有属性 attr_lines = [ f"姓名: {self.name}", f"年龄: {self.age}", f"当前储蓄: {self.savings} 美元", f"增长率: {self.growth}%" ] # 计算并添加退休储蓄结果 pension_total = self.result() attr_lines.append(f"退休总储蓄: {pension_total:.2f} 美元") return "\n".join(attr_lines) # 可选:重写__repr__,让打印列表时也显示自定义内容 def __repr__(self): return self.__str__()
2. 优化main函数的输入逻辑(可选)
原代码每创建一个实例就会请求用户输入增长率,可能导致重复输入。若需要统一使用同一个增长率,可将输入逻辑移到循环外:
def main(): with open('personer.txt') as f: raw_data = f.readlines() data = [row.split("/") for row in raw_data] data = [convert_row(row) for row in data] # 统一输入一次增长率,所有实例共用 growth_rate = get_growth() pensions = [Pension(*i, growth_rate) for i in data] # 打印所有实例 print("所有用户的养老金信息:") for pension in pensions: print(pension) print("-" * 30) # 分隔线,便于阅读 # 若重写了__repr__,直接打印列表也会显示每个实例的详细内容 # print(pensions)
3. 效果说明
运行代码后,输入增长率(统一输入或逐个输入),打印实例时会输出类似以下内容:
姓名: 张三 年龄: 30.0 当前储蓄: 5000.0 美元 增长率: 5.0% 退休总储蓄: 35934.09 美元 ------------------------------ 姓名: 李四 年龄: 40.0 当前储蓄: 10000.0 美元 增长率: 5.0% 退休总储蓄: 20934.80 美元 ------------------------------
内容的提问来源于stack exchange,提问作者rawestan
相关产品推荐
相关产品推荐

