使用Python的__repr__()函数定义对象的字符串表示形式

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__()函数也是非常相似的,但它们也有一些区别,需要根据需求进行选择。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签