python中 str 和 repr_Python中__str__和__repr__的区别

Python有一个内置的函数叫repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是“字符串表示形式”。repr就是通过__repr__这个特殊方法来得到一个对象的字符串表示形式。如果没有实现__repr__,当我们再控制台里打印一个变量的实例时,得到的字符串可能会是<__main__.object at>,这个表示的是打印的对象,以及对象的内存地址

现在让我们看看__str__和__repr__这两个方法有什么区别

首先定义一个类

class Vector:

def __init__(self, x=0, y=0):

self.x = x

self.y = y

def __str__(self):

return 'str Vector(%s, %s)' % (self.x, self.y)

然后我们在控制台上打印这个类的对象实例

>>> Vector(1, 2)

>>> str(Vector(1, 2))

'str Vector(1, 2)'

>>> print(Vector(1, 2))

str Vector(1, 2)

从上面的例子我们可以看到,当把变量的实例输入到控制台,会打印出对象的类型和对象的地址,当把对象作为参数传给str或者print方法,则会调用对象的__str__方法

现在,我们删除原来的__str__方法,加上__repr__方法,再在控制台做一样的操作,看看会有什么不同

class Vector:

def __init__(self, x=0, y=0):

self.x = x

self.y = y

def __repr__(self):

return 'repr Vector(%s, %s)' % (self.x, self.y)

重复之前打印Vector对象操作

>>> Vector(1, 2)

repr Vector(1, 2)

>>> str(Vector(1, 2))

'repr Vector(1, 2)'

>>> print(Vector(1, 2))

repr Vector(1, 2)

我们可以看到,实现我们没有实现__str__方法,但在调用str()的时候,str()会自动调用__repr__方法,并且在控制台输入对象实例的时候,出来的不再是对象类型和内存地址,而是打印我们所希望表达的对象信息

最后,我们在Vector类中加上__str__和__repr__方法

class Vector:

def __init__(self, x=0, y=0):

self.x = x

self.y = y

def __str__(self):

return 'str Vector(%s, %s)' % (self.x, self.y)

def __repr__(self):

return 'repr Vector(%s, %s)' % (self.x, self.y)

重复之前的操作

>>> Vector(1, 2)

repr Vector(1, 2)

>>> str(Vector(1, 2))

'str Vector(1, 2)'

>>> print(Vector(1, 2))

str Vector(1, 2)

可以知道,当把对象作为参数传入print()时,会自动调用对象的__str__方法,但是当__str__方法不存在时,则会调用__repr__方法。所以,如果你只想实现这两个特殊方法中的一个,建议还是选择__repr__方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值