在Python中,repr()函数是内置函数之一,用于返回一个对象的字符串表示形式,通常被称为对象的“表示(representation)”。该函数返回的字符串可以用来重新创建该对象。
repr()函数的作用类似于str()函数,但两者有一些区别。str()函数返回的是对象的“非正式字符串表示”,主要用于用户界面和输出目的。而repr()函数返回的是对象的“正式字符串表示”,主要用于程序员调试和诊断。
在实现自定义类时,如果要自定义类的字符串表示形式,可以实现__repr__()方法。这样,在调用repr()函数时,就可以返回自定义的字符串表示形式。
例如,假设有一个自定义的类Rectangle,它表示一个矩形。该类有两个属性width和height,分别表示矩形的宽和高。:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def __repr__(self):
return f'Rectangle(width={self.width}, height={self.height})'
def __eq__(self, other):
if isinstance(other, Rectangle):
return self.width == other.width and self.height == other.height
return False
这里,我们定义了一个__repr__()方法,它返回一个字符串,包含了对象的属性名和属性值,这样在调用repr()函数时就会返回这个字符串。
使用这个类创建一个Rectangle对象,然后调用repr()函数查看结果:
r = Rectangle(10, 20)
print(repr(r)) # 输出 'Rectangle(width=10, height=20)'
由于repr()函数返回的字符串是一个合法的Python表达式,可以用来重新创建这个对象。假设我们使用eval()函数来重新创建这个对象:
# 创建一个Rectangle对象
r = Rectangle(10, 20)
# 获取对象的字符串表示形式
s = repr(r)
# 重新创建对象
r2 = eval(s)
# 检查新对象和原对象是否相等
print(r == r2) # 输出 True
在这段代码中,s 是通过 repr() 方法获取的一个字符串,表示一个 Rectangle 类型的对象。然后,通过 eval(s) 方法将这个字符串转换回一个对象。由于这个字符串是由 repr() 方法生成的,它是一个有效的 Python 表达式,所以可以被 eval() 方法正确地解析。
eval(s) 返回的对象是一个 Rectangle 类型的实例对象,与 r 的数据类型相同。因为 repr() 和 eval() 方法的本质是将一个对象转换成一个字符串表示和将一个字符串表示转换成一个对象,而它们并不影响这个对象的数据类型。因此,r 和 r2 都是 Rectangle 类型的实例对象。
repr()函数用于返回Python对象的可读字符串表示,常用于调试。不同于str()函数,repr()返回的字符串可以被eval()重构对象。在自定义类时,可通过实现__repr__()方法定制对象的repr()表现,如示例中的Rectangle类。文章还提及了eval()函数如何将字符串转换回对象,并保持数据类型不变。
6704

被折叠的 条评论
为什么被折叠?



