在定义方法时,如果__str__和__repr__方法中定义返回的语句不一样,在运行之后,print(s)输出的还是__srt__方法中定义的语句,这是为什么
关于调用两种方法的时机
使用print()时
使用%s和f'{}'
拼接对象时
使用str(x)转换对象x时
在上述三种场景中,会优先调用对象的__str__()
方法;若没有,就调用__repr__()
方法;若再没有,则显示其内存地址。
特别地,对于下面两种场景:
用%r进行字符串拼接时
用repr(x)转换对象x时
则会调用这个对象的__repr__()
方法;若没有,则不再看其是否有__str__()
方法,而是显示其内存地址。
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score def __str__(self): return 'Student: {}, {}, {}'.format(self.name, self.gender, self.score) def __repr__(self): return 'STUDENT: {}, {}, {}'.format(self.name, self.gender, self.score) s = Student('Bob', 'Male', 88) print(s) print('%s' % s) print('%r' % s) print(str(s)) print(repr(s))