Python:__str__() 和 __repr__()

#最近在根据廖雪峰老师的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

 

posted @ 2020-02-13 18:44  终落  阅读(199)  评论(0编辑  收藏  举报
页脚Html代码