Python是朵两生花 (__str__ __repe__ is) 讲的很清楚
两生花是西方传说中的一种植物,两个花朵亲密无间,却始终朝着两个相反的开放,直到损落的那一瞬间才有此生唯一一次的相顾。本文寓意让开在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__总是比__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 在于测试两个变量是否引用了同一个对象
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
未完待续......
                    
                
                
            
        
浙公网安备 33010602011771号