如何打印我的类而不获得内存引用



我有一个名为Pension的类,其属性包括一个人的姓名、年龄、储蓄和增长率。

我有一个类方法来计算一个人退休时的总储蓄。

在我的main函数下,我想打印类,看看我的代码是否按预期工作,但我不知道如何做,因为我只在打印时获得内存引用。

如何打印类实例,使其遍历其所有属性并运行函数result,并打印结果?值得注意的;要运行计算养老金总额的函数'result',增长率由用户输入并在其自己的函数中(并在main()中运行)

例如,如果我尝试打印最后第二行:print(pensions),我只得到内存引用。因此,在本例中,如果一个人(我从文件中读取的数据)节省了1000美元(使用我的结果方法),我希望将这一事实打印到列表中。

这是我的代码:

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)

def convert(elem: str):
if not elem.isdigit():
return elem
return float(elem)

def convert_row(r: list) -> list:
return [convert(e) for e in r]
def get_growth(msg: str = "Enter growth rate: "):
return float((input(msg).strip()))

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]
pensions = [Pension(*i, get_growth()) for i in data]

main()

Pension类对象的角度来看,如何提供增长实际上并不重要。此外,在这种情况下,也许值得将结果作为属性,然后不需要将其作为函数调用(只需像任何其他属性一样访问,但值将"动态"计算)。您可以自定义__str__方法来返回对象的任何str表示。

class Pension:
def __init__(self, name,age,savings,growth):
self.name = name
self.age = age
self.savings = savings
self.growth = growth
self._result = result
@property
def result(self):
amount=self.savings
rate=1+(self.growth/100)
years=65-self.age
return (amount * (1 - pow(rate, years))) / (1 - rate)

def __str__(self):
return f"Pension:n{self.amount=}n{self.age=}n{self.savings}n{self.growth=}n{self.result}"

然后只是:

for p in pensions:
print(p)

最新更新