#最近在根据廖雪峰老师的python学习教程学习,以下是学习过程中做的一些学习总结
1、__str__()和 __repr__()的作用
当我们定义一个类时,进行打印一个实例,通常打印出来的都是一堆类名+继承类+内存地址,显示的非常不友好。
class Student(object): def __init__(self,name): self.name =name >>>A = Student('lisa') >>>print(A) <__main__.Student object at 0x000001A69C01F198>
怎样才能打印的友好一些,让我们看结果更加直观一点,这个时候就用到了__str__方法:
class Student(object): def __init__(self,name): self.name = name def __str__(self): return self.name
>>>A = Student('lisa')
>>>print(A)
lisa
现在我们再次观看结果就非常的直观,直接显示出了实例内部的重要数据,但是细心的同学会发现我们不用print直接打印变量显示的结果还是不友好的:
class Student(object): def __init__(self,name): self.name = name def __str__(self): return self.name >>>A = Student('lisa') >>>A <__main__.Student object at 0x00000227DB28F128>
打印变量还是原来的显示,这就用到了__repr__()方法,我们在代码的方法中添加一个__repr__的方法:
class Student(object): def __init__(self,name): self.name = name def __str__(self): return self.name def __repr__(self): return self.name
然后我们再次打印结果:
>>>A = Student('lisa') >>>A lisa >>>print(A) lisa
>>>print(Student('lisa'))
lisa
现在无论是直接输出变量还是打印变量,类方法都能直观的显示结果。
2、两者的区别
知道了两者的用法,不知道各位能否发现什么区别,首先两者是相似的,因为在代码中的作用都是为了让结果好看点,更利于让人观看;但是两者之间还是存在一点差别的,在python中,print()是面向用户的,主要是为了用户观看,直接打印变量是为了向管理者展示的:
>>>A #面向管理者 lisa >>>print(A) #面向用户
lisa
还有一点,在打印操作时会首先尝试__str__和str的内置函数,二__repr__用于其他环境中,当代码中没有__str__方法也会返回有好的提示,实际上__str__只是覆盖了__repr__的提示。
class Student(object): def __init__(self,name): self.name = name def __str__(self): return '__str__ '+self.name def __repr__(self): return '__repr__'+self.name
>>> a = Student('lisa') >>> a __repr__lisa >>> print(a) __str__ lisa