__repr__方法似乎没有被调用
在定义方法时,如果__str__和__repr__方法中定义返回的语句不一样,在运行之后,print(s)输出的还是__srt__方法中定义的语句,这是为什么
在定义方法时,如果__str__和__repr__方法中定义返回的语句不一样,在运行之后,print(s)输出的还是__srt__方法中定义的语句,这是为什么
2021-11-20
关于调用两种方法的时机
使用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))举报