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
问题:将两个方法顺序变化那?
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
直接执行obj
class foo: def __str__(self): return "B" def __repr__(self): return "A" obj = foo() obj
结果:
A
总结:
终端直接操作obj,输出结果repr优先。如果用print;则,str优先。
pycharm直接输出obj没反应。