python__str__()和__repr__()

今天测试的时候遇到这个问题,在往上查了很久得到的结果是这样的。

  • __repr__()’’做一样的事情,返回一个对象的“官方”字符串表示。其结果绝大多数情况下(不是所有)可以通过求值运算(内建函数eval())重新得到该对象。
  • __str()__则不同,它生成一个对象的可读性好的字符串表示,结果通常无法用eval()求值,但适合print输出。

但是当函数中两个方法都存在的时候,看看结果:

__repr__()代码

class foo:
    def __repr__(self):
        return "A"

obj = foo()
print(obj) 

结果:

A

__str__()代码

class foo:
    def __str__(self):
        return "B"

obj = foo()
print(obj)

 

结果:

B

当类中两个方法都有的时候:

Pycharm测试

代码:

class foo:
    def __repr__(self):
        return "A"
    
    def __str__(self):
        return "B"

obj = foo()
print(obj)

结果:

B

终端测试

class foo:
    def __repr__(self):
        return "A"
    def __str__(self):
        return "B"

obj = foo()
print(obj)

结果:

B

直接操作obj

class foo:
    def __repr__(self):
        return "A"
    
    def __str__(self):
        return "B"

obj = foo()
obj

结果:

A

image

问题:将两个方法顺序变化那?

pycharm测试

class foo:
    def __str__(self):
        return "B"
    
    def __repr__(self):
        return "A"

obj = foo()
print(obj)

结果:

B

终端测试:

class foo:
    def __str__(self):
        return "B"

    def __repr__(self):
        return "A"

obj = foo()
print(obj)

结果:

B

image

直接执行obj

class foo:
    def __str__(self):
        return "B"
    def __repr__(self):
        return "A"

obj = foo()
obj

结果:

A

image

 

总结:

 终端直接操作obj,输出结果repr优先。如果用print;则,str优先。

pycharm直接输出obj没反应。

posted on 2016-12-13 02:30  jayafs  阅读(130)  评论(0编辑  收藏  举报

导航