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日

悬赏问题

  • ¥15 这个复选框什么作用?
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决