详解Python 类的__repr__方法转换字符串

  • Post category:Python

Python 类的 __repr__ 方法是一个魔法方法,用于返回一个对象的字符串表示形式。这个方法的主要目的是使对象的输出更容易阅读和理解。在使用 print() 函数输出对象时,如果没有实现这个方法,会默认输出对象的地址信息,不方便查看。

下面是实现 __repr__ 方法的基本语法:

class ClassName:
    def __repr__(self):
        return "字符串形式的对象表示"

__repr__ 方法的返回值应该是一个字符串,表示对象的字符串形式。这个字符串应该具有表达力,在需要排错的时候,也尽可能明确地概括对象的属性和状态。

下面是一个简单的示例,演示如何使用 __repr__ 方法打印自定义的字符串形式的类对象:

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"User,姓名:{self.name},年龄:{self.age}"

user = User("张三", 18)
print(user)

输出结果为:

User,姓名:张三,年龄:18

这样输出,我们就可以更方便地查看 user 对象的属性信息。

接下来,我们使用一个更复杂的示例,演示如何使用 __repr__ 方法来输出更详细的对象信息:

class Student:
    def __init__(self, name, gender, score):
        self.name = name
        self.gender = gender
        self.score = score

    def __repr__(self):
        return f"学生姓名:{self.name}\n性别:{self.gender}\n成绩:{self.score}"

    def __str__(self):
        return f"学生姓名:{self.name}\t性别:{self.gender}\t成绩:{self.score}"

student = Student("张三", "男", 90)

# 输出详细信息
print(repr(student))

# 输出简洁信息
print(student)

输出结果为:

学生姓名:张三
性别:男
成绩:90
学生姓名:张三    性别:男    成绩:90

在这个示例中,我们不仅实现了 __repr__ 方法,还重载了 __str__ 方法,用于输出简洁的对象信息。通常情况下,__str__ 方法的输出比 __repr__ 方法更加简洁,主要用于展示给终端用户查看。而 __repr__ 则应该输出更详细的信息,主要用于调试和开发。