str与repr 改变对象的字符串显示

 1 class Foo:
 2     num = 3
 3 
 4     def __init__(self, name, age):
 5         self.name = name
 6         self.age = age
 7 
 8     def __str__(self):  # 自己定制打印信息
 9         return '新的自定制显示的方法名字是%s  年龄是%s' % (self.name, self.age)
10 
11     def __repr__(self):  # 如果找不到str方法,就会去找__repr__方法
12         return '这是定制的'  # 该方法也可以在解释器里面显示
13 
14 
15 f1 = Foo('小白', 28)
16 print(f1)  # 触发str(f1)----->f1.__str__()   相当于以前的len()是执行的__len__()方法
17 a = str(f1)  # 验证print(f1) 就是执行str(f1)
18 print(a)
19 b = f1.__str__()  # 验证print(f1) 就是执行str(f1)
20 print(b)
21 print(f1)
22 输出:
23 新的自定制显示的方法名字是小白  年龄是28
24 新的自定制显示的方法名字是小白  年龄是28
25 新的自定制显示的方法名字是小白  年龄是28
26 新的自定制显示的方法名字是小白  年龄是28
27 新的自定制显示的方法名字是小白  年龄是28
28 新的自定制显示的方法名字是小白  年龄是28

如果__str__ 没有被定义,就会找到__repr__     retrun必须返回字符串,否则会抛出异常

原文地址:https://www.cnblogs.com/ch2020/p/12444653.html