1. 什么是__repr__()函数?
在Python编程语言中,__repr__()函数是一个预定义的函数用于创建对象的字符串表示形式。可以将它看作是“打印”或“表示”一个对象的方式。
当我们在控制台中输入一个对象名并按下回车键时,Python会自动调用该对象的__repr__()函数来返回一个字符串,表示该对象的信息。
例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Tom", 18)
print(p)
运行以上代码,会得到如下输出:
<__main__.Person object at 0x7f5646d64f40>
可以看出,以上输出并不能很好地表示对象的信息。这就是在对象上调用print()函数时默认调用的__repr__()函数的输出。
2. 如何使用__repr__()函数定义对象的字符串表示形式?
当我们创建一个自定义对象时,我们希望能够自定义该对象的字符串表示形式,以便更好地表示对象的信息。
下面让我们通过一个例子来学习如何使用__repr__()函数定义对象的字符串表示形式。
2.1 定义一个简单类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
2.2 添加__repr__()函数
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
在上面的代码中,我们重写了__repr__()函数,并根据我们的需求返回了一个字符串,表示该对象的信息。这将是实例化此类的对象的字符串表示形式。
2.3 测试代码
p = Person("Tom", 18)
print(p)
运行以上代码,我们会得到如下输出:
Person(name='Tom', age=18)
可以看出,我们已经成功地自定义了我们创建的Person类的字符串表示形式。
3. __str__()函数和__repr__()函数的区别
在Python编程中,__str__()函数和__repr__()函数是非常相似的,它们都被用来产生对象的字符串表示形式。但是,它们之间还是有一些区别的。
3.1 区别1:__repr__()用于开发者,__str__()用于用户
__repr__()函数是开发者看到的字符串表示形式,__str__()函数是最终用户看到的字符串表示形式。
3.2 区别2:__str__()的返回值优先级高于__repr__()的返回值
当一个对象没有定义__str__()函数时,Python解释器会调用其__repr__()函数来产生一个字符串表示形式。
当一个对象同时定义了__repr__()和__str__()函数时,__str__()函数的返回值会优先于__repr__()函数的返回值。
3.3 区别3:__repr__()对eval()函数有意义,__str__()没有
实现了__repr__()函数定义对象的字符串表示形式后,我们可以通过eval()函数来还原这个对象,因为eval()函数可以解释出对象的字符串表示形式,并创建出一个新的对象。
而__str__()函数并没有这个功能,它的返回值只是用于让最终用户看到的用户友好显示。
4. 实战演练:使用__repr__()函数定义更复杂的对象的字符串表示形式
4.1 问题描述
假设我们需要定义一个班级的学生信息,每个学生的信息包含其姓名、性别、年龄、成绩,如何使用__repr__()函数来定义一个Student类的字符串表示形式,以便更好地表示一个学生的信息?
4.2 解决方案
我们可以在Student类中添加__repr__()函数,用于返回学生信息的字符串表示形式。
class Student:
def __init__(self, name, gender, age, score):
self.name = name
self.gender = gender
self.age = age
self.score = score
def __repr__(self):
return f"Student(name='{self.name}', gender='{self.gender}', age={self.age}, score={self.score})"
可以看出,我们通过字符串拼接的方式,返回了一个完整的学生信息字符串表示形式。
4.3 测试代码
接下来,我们通过创建一个学生对象并打印其字符串表示形式来测试我们的代码。
s = Student("Tom", "male", 18, 90)
print(s)
运行以上代码,我们会得到如下输出:
Student(name='Tom', gender='male', age=18, score=90)
可以看出,我们已经成功地自定义了我们创建的Student类的字符串表示形式。
总结
在Python编程语言中,__repr__()函数是一个预定义的函数,用于创建对象的字符串表示形式。在定义自定义对象时,我们可以使用__repr__()函数来自定义其字符串表示形式,以便更好地表示对象的信息。此外,__str__()函数和__repr__()函数也是非常相似的,但它们也有一些区别,需要根据需求进行选择。