python中__repr__ VS __str__

__repr__ vs __str__

看下面例子:

>>> class Spam():
... 	def __init__(self, name = 'Bob'):
...     	self.name = name

>>> S = Spam()
>>> s
<__main__.Spam object at 0x10372f3d0>	# 显示并并不友好 直接显示了内存地址
>>> print(s)
<__main__.Spam object at 0x10372f3d0>

# 重载__repr__后,不管是交互界面直接输出还是print输出都会按照我们定义的输出

>>> class TestRepr(Spam):
...     def __repr__(self):
...         return 'TestRepr: %s' % self.name
...
>>> tr = TestRepr()
>>> tr
TestRepr: Bob		
>>> print(tr)
TestRepr: Bob

# 重载__str__后,只有print输出都会按照我们定义的输出

>>> class TestStr(Spam):
...     def __str__(self):
...             return 'TestStr: %s' % self.name
...
>>> ts = TestStr()
>>> ts
<__main__.TestStr object at 0x102900410>
>>> print(ts)
TestStr: Bob

# 一个类可以同时拥有两者用来显示不同的信息

>>> def str(self):
...     return 'This is Str %s' % self.name
>>> TestRepr.__str__ = str
>>> tr
TestRepr: Bob
>>> print(tr)
This is Str Bob
  • __repr__方法通常用于提供对象的一种代码底层级显示
  • __str__方法适用于更加用户有好的显示

一个类可以同时提供以上两种方法,打印运行__str__方法而交互式命令行采用__repr__方法,你可以为两种不同的观众定义不同的打印,让开发者看到额外的细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值