码迷,mamicode.com
首页 > 编程语言 > 详细

Python中的__str__()方法和__repr__()方法

时间:2019-06-09 09:55:07      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:obj   屏幕   focus   它的   end   修改   优先   code   使用   

有时候我们想让屏幕打印的结果不是对象的内存地址,而是它的值或者其他可以自定义的东西,以便更直观地显示对象内容,可以通过在该对象的类中创建或修改__str__()__repr__()方法来实现(显示对应方法的返回值)

注意:__str__()方法和__repr__()方法的返回值只能是字符串!

关于调用两种方法的时机

  • 使用print()时

  • 使用%sf‘{}‘拼接对象时

  • 使用str(x)转换对象x时

在上述三种场景中,会优先调用对象的__str__()方法;若没有,就调用__repr__()方法;若再没有,则显示其内存地址。

特别地,对于下面两种场景:

  • %r进行字符串拼接时

  • repr(x)转换对象x时

则会调用这个对象的__repr__()方法;若没有,则不再看其是否有__str__()方法,而是显示其内存地址。

为便于理解,使用下面的直观例子进行说明:

class A(object): pass
class B(object):
    def __str__(self):
        return 1
class C(object):
    def __repr__(self):
        return 2
class D(object):
    def __str__(self):
        return 3
    def __repr__(self):
        return 4
a=A()
b=B()
c=C()
d=D()
print(a,b,c,d)
print(%s,%s,%s,%s%(a,b,c,d))
print(%r,%r,%r,%r%(a,b,c,d))
print(f{a},{b},{c},{d})
print(str(a),str(b),str(c),str(d))
print(repr(a),repr(b),repr(c),repr(d))

执行结果:

<__main__.A object at 0x0000000002419630> 1 2 3
<__main__.A object at 0x0000000002419630>,1,2,3
<__main__.A object at 0x0000000002419630>,<__main__.B object at 0x0000000002419A58>,2,4
<__main__.A object at 0x0000000002419630>,1,2,3
<__main__.A object at 0x0000000002419630> 1 2 3
<__main__.A object at 0x0000000002419630> <__main__.B object at 0x0000000002419A58> 2 4

 

Python中的__str__()方法和__repr__()方法

标签:obj   屏幕   focus   它的   end   修改   优先   code   使用   

原文地址:https://www.cnblogs.com/oddgod/p/10992366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!