为了账号安全,请及时绑定邮箱和手机立即绑定

__repr__方法似乎没有被调用

在定义方法时,如果__str__和__repr__方法中定义返回的语句不一样,在运行之后,print(s)输出的还是__srt__方法中定义的语句,这是为什么

正在回答

1 回答

关于调用两种方法的时机

  • 使用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))


8 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

__repr__方法似乎没有被调用

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信