MintKaren 2022-04-12 10:05 采纳率: 100%
浏览 25
已结题

python的repr()和eval()的关系是什么?eval可以还原repr()中的对象吗?

问题遇到的现象和发生背景

为什么eval(repr(s))在这个情况下与原来的s相等(结果为True)

img

而在这个情况下,r2和r却不相等(结果为False)呢?

img

问题相关代码,请勿粘贴截图

class Represent(object):
def init(self, x, y):
self.x, self.y = x, y
def repr(self):
return "Represent(x={},y="{}")".format(self.x, self.y)
def str(self):
return "Representing x as {} and y as {}".format(self.x, self.y)

r = Represent(1, "Hopper")
print(r) # prints str
print(r.repr) # prints repr: '<bound method Represent.__repr__ of
Represent(x=1,y="Hopper")>'
rep = r.repr() # sets the execution of repr to a new variable
print(rep) # prints 'Represent(x=1,y="Hopper")'
r2 = eval(rep) # evaluates rep
print(r2) # prints str from new object
print(r2 == r) # prints 'False' because they are different objects

运行结果

print(r2 == r) # prints 'False'

  • 写回答

1条回答 默认 最新

  • ~白+黑 Python领域新星创作者 2022-04-12 10:53
    关注
    
    repr(object)
    返回对象的可打印形式字符串。对于很多类型而言,本函数试图返回的字符串,会与将对象传
    给eval() 所生成的结果相同;不然,结果就是一个尖括号包裹的字符串,包含了对象类型名称及
    其附加信息,附加信息通常包括对象的名称和内存地址。通过定义 __repr__() 方法,类可以控
    制本函数将为实例返回的内容。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度