类和对象10:对象访问方法

本文介绍Python中__repr__和__str__方法的使用,详细解释了这两种方法的区别及如何为自定义类设置合适的对象表示形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. __repr__(self)

2. __str__(self)


1. __repr__(self)

该方法在 repr() 上被调用,交互响应,嵌套出现;

如果一个类没有定义  __str__(),则该方法也在 str(object) 、print() 上被调用;

repr(object):

  • repr() 是 Python 的内置函数,返回对象的可打印形式字符串。对于很多类型而言,本函数试图返回的字符串,会与将对象传给 eval() 所生成的结果相同;
  • 不然,结果就是一个尖括号包裹的字符串,包含了对象类型名称及其附加信息,附加信息通常包括对象的名称和内存地址。通过定义 __repr__() 方法,类可以控制本函数将为实例返回的内容。

此方法通常被用于调试,因此确保其表示的内容包含丰富信息且无歧义是很重要的;

重构 __repr__() 方法后,调试时直接输入实例对象名回车,即返回方法执行结果。

#创建使用默认 __repr__() 的类和实例
class Test:
     pass
test1 = Test()

#直接输入实例对象名回车,返回对象的可打印形式字符串
test1
<__main__.Test object at 0x0000024C3CB1DBE0>

#创建重构 __repr__() 的类和实例
class Test:
     def __init__(self, name = ''):
         self.name = name
         
     def __repr__(self):
         return f'objectname:{self.name}'     
test1 = Test('test1')

#直接输入实例对象名回车,或调用 str()、print() 函数,成功调用重构的 __repr__() 方法
test1
objectname:test1
str(test1)
'objectname:test1'
print(test1)
objectname:test1

2. __str__(self)

该方法在 str(object) 以及内置函数 format() 和 print() 上被调用,通过以生成一个对象的“非正式”或格式良好的字符串表示;

返回值必须为一个字符串对象,否则调用 str(self)、print(self) 时报错;

此方法与 object.__repr__() 的不同点在于 __str__() 并不预期返回一个有效的 Python 表达式:可以使用更方便或更准确的描述信息;内置类型 object 所定义的默认实现会调用 object.__repr__()。

#创建重构 __repr__()、 __str__() 的类和实例
class Test2:
     def __init__(self, name=''):
         self.name = name
         
     def __repr__(self):
         return 'Hi, everyone!'
 
     def __str__(self):
         return f'objectname:{self.name}'  

test2 = Test2('test2')

#调用 repr()、str()、print(),成功调用重构方法
test2
Hi, everyone!
str(test2)
'objectname:test2'
print(test2)
objectname:test2

#创建重构返回非字符串的 __str__() 的类和实例
class Test2:
     def __init__(self, name=''):
         self.name = name
 
     def __str__(self):
         return 1234 

#调用 repr() 正常     
test2 = Test2()
test2
<__main__.Test2 object at 0x0000022F161B1670>

#调用 str()、print() 函数,报错
print(test2)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: __str__ returned non-string (type int)

str(test2)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: __str__ returned non-string (type int)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃烧的火鸟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值