• 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
  • 相关阅读:
    spring中Bean的懒加载
    ActiveMQ学习教程
    Maven中解决jar包冲突的三种方式
    Spring的日志管理
    mybatis使用collection查询集合属性规则
    springcloud之Feign伪装
    springcloud之Hystrix熔断入门
    springcloud的负载均衡Ribbon入门
    springcloud的Eureka启动时报错:Connection refused: connect
    springboot启动过程中出现You must configure either the server or JDBC driver (via the serverTimezone configuration
  • 原文地址:https://www.cnblogs.com/twlr/p/12304654.html
Copyright © 2020-2023  润新知