python中__repr__函数实例

repr()函数用于返回Python对象的可读字符串表示,常用于调试。不同于str()函数,repr()返回的字符串可以被eval()重构对象。在自定义类时,可通过实现__repr__()方法定制对象的repr()表现,如示例中的Rectangle类。文章还提及了eval()函数如何将字符串转换回对象,并保持数据类型不变。

在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 类型的实例对象。

更多关于__name__函数,点这里link
更多关于__eq__函数,点这里link

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值