zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)
    Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作
    QT_SVG格式图片浏览器_源代码下载_详细注释
    Qt5_简易画板_详细注释
    UVa1593_Allgnment_Of_Code
    UVa815_Flooded!
    虚拟机下Linux(终端)配置网络的方法
    R语言入门小练习
    QT_文本编辑器_源码下载
    简易qq对话框
  • 原文地址:https://www.cnblogs.com/twlr/p/12304654.html
Copyright © 2011-2022 走看看