把str返回值加入列表为什么全部变成内存地址了?既然有返回值,加入列表中应该是返回值才对啊?怎么才能实现把str返回值加入到一个列表中呢?
![](https://profile-avatar.csdnimg.cn/08174827c7964fe1affd60cb51b6e19c_weixin_61509672.jpg!4)
Python中魔术方法str返回值的问题
把str返回值加入列表为什么全部变成内存地址了?既然有返回值,加入列表中应该是返回值才对啊?怎么才能实现把str返回值加入到一个列表中呢?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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']
推荐相关链接
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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极坐标柱形图的图形显示的特别小呢