• 面向对象___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__,如果没有找父类的

  • 相关阅读:
    Java Runtime.exec()的使用
    加密备忘
    maven 配置 Java Servlet API
    flume spooldir bug修复
    修复eclipse build-helper-maven-plugin 异常
    Win10系统安装Office2016错误,提示需要更新客户端的解决方法
    ORA-14300: 分区关键字映射到超出允许的最大分区数的分区
    ORA-14402:更新分区关键字列将导致分区更改(分区表注意)
    oracle 11g自动时间分区备忘
    Oracle计算时间函数(numtodsinterval、numtoyminterval)
  • 原文地址:https://www.cnblogs.com/accolade/p/10515963.html
Copyright © 2020-2023  润新知