zoukankan      html  css  js  c++  java
  • 面向对象___str__和__repr__

    老师的博客关于此知识点 http://www.cnblogs.com/Eva-J/articles/7351812.html#_label7

    __str__和__repr__

    改变对象的字符串显示__str__,__repr__

    先来看一段代码

    class Course:
        belong_to='old boy'
        def __init__(self,name,number,site,teacher):
            self.name=name
            self.number=number
            self.site=site
            self.teacher=teacher
        def __str__(self):
            print('我执行了__str__')
            return '好像写重复了,不管了,我执行了__str__方法' 
                   '申明一下我的返回值 必须是字符串的类型'
        def __repr__(self):
            print('我执行了__repr__操作')
            return '我是__repr__的返回值,我的返回值也必须是str类型'
        def fun(self):
            print('我就是是个弟弟,func功能而已')
    python =Course('python',92,'张家界','alex')
    print(python)#直接打印对象时,如果类的里面有__str__方法时,会调用__str__方法,并且返回return的值
                # 此时调用的是Course里的__str__的方法
    num= 1
    print(num)#此时调用的是int 中的__str__方法
    '''输出结果我执行了__str__
    好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型
    1'''

    注意事项和解释写在代码里面了

    接着上面的代码

    print('我是测试的下面是内容:
    %s'%python)
    '''

    我执行了__str__
    我是测试的下面是内容:
    好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型

    '''

    以上可见,当print是如果里面有%s,%对象名时,也执行了__str__的方法,并且接受了其返回值,并打印了出来

    同样,接着上面的的代码,来看如下:

    
    
    print(str(python))
    '''输出结果我执行了__str__ 
    好像写重复了,不管了,我执行了__str__方法申明一下我的返回值 必须是字符串的类型
    '''

    再来看如下代码

    print('%r'%python)
    print(repr(python))
    '''输出结果:我执行了__repr__操作
    我是__repr__的返回值,我的返回值也必须是str类型
    我执行了__repr__操作
    我是__repr__的返回值,我的返回值也必须是str类型
    '''

    同理此时也是调用了对象中的__str__方法,并接受打印了返回值

    总结一下:当一个类,对象中有__str__方法时,当print是有3中情况会调用__str__,并接受和打印其返回值

      1.直接打印对象时 print(对象)

      2.打印是有%s时,并且表明%s就是object(对象)时。print('内容%r)%对象,有点像格式化输出

      3.print(str(对象))

    执行__repr__时候

      1.print(‘%r’%对象)

      2.3.print(repr(对象))

    __str__与__repr__的返回值必需是字符串的形式

     值得注意的是,当没有__str__,但有__repr__时,__repr__变充当了__str__的角色,执行__repr__方法,并接受其返回值,打印出来

    print(obj)/'%s'%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串
    如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。
    repr(),只会找__repr__,如果没有找父类的

  • 相关阅读:
    树莓派配置
    《C#微信开发系列(Top)-微信开发完整学习路线》
    Git基础使用教程(仓库初始化,源码clone,源码push)
    《Cron表达式详解》
    《CSS实现单行、多行文本溢出显示省略号》
    《C#多线程编程实现方式》
    《SQLServer删除重复数据的方法》
    《java提高数据导入效率优化思路》
    《如何使用Javascript判断浏览器终端设备》
    《动手实现一个网页加载进度loading》
  • 原文地址:https://www.cnblogs.com/accolade/p/10515963.html
Copyright © 2011-2022 走看看