问答详情
源自:4-2 Python类的__str__ 和 __repr__方法

__repr__方法似乎没有被调用

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

提问者:慕无忌1545359 2021-11-20 15:46

个回答

  • 慕粉_pp
    2021-11-23 10:50:29

    关于调用两种方法的时机

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