SOUL~Z 2024-05-16 11:22 采纳率: 80%
浏览 1
已结题

Python中魔术方法str返回值的问题

img


把str返回值加入列表为什么全部变成内存地址了?既然有返回值,加入列表中应该是返回值才对啊?怎么才能实现把str返回值加入到一个列表中呢?

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-05-16 11:22
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您想要解决的问题是在Python中,使用魔术方法__str__返回的字符串值为什么在加入列表后变成了对象的内存地址,以及如何将__str__的返回值正确地加入到列表中。

    图片内容

    图片中展示了一段Python代码,代码定义了一个名为Record的类,该类有一个初始化方法__init__,用于初始化类的实例变量,包括订单日期、订单ID、订单金额和省份。此外,还有一个__str__方法,用于返回一个格式化的字符串。然后创建了一个Record类的实例,并尝试将其打印出来,接着尝试将这个实例添加到一个列表中,最后打印这个列表。

    问题出现原因

    在Python中,当您将一个对象添加到列表中时,实际上是将对象的引用添加到了列表中,而不是对象的字符串表示。当您尝试打印列表中的某个对象时,Python会调用该对象的__repr__方法来获取其字符串表示,而不是__str__方法。__repr__方法默认会返回对象的内存地址,这就是为什么您在列表中看到对象的内存地址而不是__str__返回的字符串。

    问题解决方案

    要解决这个问题,您可以在将对象添加到列表之前,先获取对象的字符串表示,然后将这个字符串添加到列表中。或者,您可以重写对象的__repr__方法,使其返回您希望的字符串表示。

    提供代码

    以下是修改后的代码,它将Record对象的字符串表示添加到列表中:

    class Record:
        def __init__(self, date, order_id, money, province):
            self.date = date
            self.order_id = order_id
            self.money = money
            self.province = province
    
        def __str__(self):
            return f"{self.date}, {self.order_id}, {self.money}, {self.province}"
    
    # 创建Record对象
    record = Record('aa', 'bb', 'cc', 'dd')
    
    # 获取对象的字符串表示并添加到列表
    list_x = []
    list_x.append(str(record))  # 使用str()函数转换对象为字符串
    
    print(list_x)  # 打印列表,应该显示Record对象的字符串表示
    

    代码运行方式

    这段代码可以在任何支持Python的环境下运行,例如在命令行、IDE(如PyCharm)或者Jupyter Notebook中。

    代码预期运行结果

    ['aa, bb, cc, dd']
    

    推荐相关链接

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日

悬赏问题

  • ¥15 ORACLE两个不同实例数据库,建立dblink怎么用insert插入语句
  • ¥15 RCS plot 包内置数据集使用时报错,如何解决?
  • ¥50 python for 循环优化数据优化
  • ¥15 keil+mspm0g3507+二维总线舵机
  • ¥15 如何用wireshark分析找出url接口和param参数
  • ¥15 有谁知道这是阿里云那个应用的域名吗,怎么调用?
  • ¥30 正则表达式的一些问题
  • ¥15 C#如何使用ClosedXML库搭配别的库实现:将指定Excel区域导出为图片(例如A1:AO50)
  • ¥15 虚拟机只能接收不能发送
  • ¥15 为什么echarts极坐标柱形图的图形显示的特别小呢