【问题标题】:How to print my class and not get memory reference如何打印我的课程而不获取内存参考
【发布时间】:2022-11-30 01:00:03
【问题描述】:

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

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

在我的主要功能下,我想打印类以查看我的代码是否按预期工作,但我不知道该怎么做,因为我在打印时只获取内存引用。

如何打印类实例,以便它遍历所有属性并运行函数结果,然后打印结果?值得注意的是;运行计算总养老金的“结果”函数,增长率是用户输入的,并且是它自己的函数(并在 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()

【问题讨论】:

  • 请使用您希望从print(pensions) 看到的输出示例更新您的问题。
  • 您需要覆盖 __str__ dunder 方法
  • 你要打印实例类的。更具体地说,您想要的不是object 为每个实例提供的默认字符串表示形式。这就是 __str____repr__ 方法的用途。
  • 这回答了你的问题了吗? How to print instances of a class using print()?

标签: python class methods printing


【解决方案1】:

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:
{self.amount=}
{self.age=}
{self.savings}
{self.growth=}
{self.result}"

然后只是:

for p in pensions:
    print(p)

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多