Python是朵两生花 (__str__ __repe__ is) 讲的很清楚

本文深入探讨Python中__repr__与__str__方法的作用与区别,通过实例展示如何为对象定制显示信息,同时解析'=='与'is'运算符在对象比较中的不同用途。

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

 
两生花是西方传说中的一种植物,两个花朵亲密无间,却始终朝着两个相反的开放,直到损落的那一瞬间才有此生唯一一次的相顾。本文寓意让开在Python中的两生花能朝潮暮暮相知相识相对,盖因作者能力有限,一时间无法亭亭如盖也,但也会坚持更新本文,以期两生花能生生世世相对。
 
 
1 __repr__ &&__str__

如果没有他们?那么我们只能得到对象在内存中的位置
In [1]: class Ctest(object):
   ...:     pass
   ...: 

In [2]: var = Ctest()

In [3]: var
Out[3]: <__main__.Ctest at 0x1619950>

In [4]: print var
<__main__.Ctest object at 0x1619950>


所以,在我们要对某个对象定制显示简单易懂的信息时,他俩很有用

如果我们希望任何环境都有统一显示时,__repr__总是比__str__好
 
当仅仅定义__repr__时:

In [1]: class Ctest(object):
   ...:     def __repr__(self):
   ...:         return "Hi,I\'m repr"
   ...:    

In [2]: var = Ctest()

In [3]: var
Out[3]: Hi,I\'m repr

In [4]: print var
Hi,I\'m repr


当仅仅定义__str__时:

In [5]: class Ctest(object):
   ...:     def __str__(self):
   ...:         return "Hi,I\'m str"
   ...:    

In [6]: var = Ctest()

In [7]: var
Out[7]: <__main__.Ctest at 0x2938510>

In [8]: print var
Hi,I\'m str


当2个都定义时:

In [12]: class Ctest(object):
    def __str__(self):
        return "Hi,I\'m str"
    def __repr__(self):
        return "Hi,I\'m repr"
   ....:    

In [13]: var = Ctest()

In [14]: var
Out[14]: Hi,I\'m repr

In [15]: print var
Hi,I\'m str


2 ==  && is


创建一个共享引用:
 
In [1]: Andy = [1,2,3]

In [2]: Bill = Andy

In [3]: Andy == Bill
Out[3]: True

In [4]: Andy is Bill
Out[4]: True


== 在于测试两个被引用的对象是否有相同的值
is 在于测试两个变量是否引用了同一个对象
 
In [5]: Andy = [1,2,3]

In [6]: Bill = [1,2,3]

In [7]: Andy == Bill
Out[7]: True

In [8]: Andy is Bill
Out[8]: False


未完待续......

转载于:https://www.cnblogs.com/stevenzeng/p/5154954.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值