zoukankan      html  css  js  c++  java
  • 146 __str__和__repr__

    一、__str__

    • 打印时触发
    class Foo:
        pass
    
    
    obj = Foo()
    
    print(obj)
    
    <__main__.Foo object at 0x10d2b8f98>
    
    dic = {'a': 1}  # d = dict({'x':1})
    print(dic)
    
    {'a': 1}
    
    • obj和dic都是实例化的对象,但是obj打印的是内存地址,而dic打印的是有用的信息,很明显dic的打印是非常好的
    class Foo:
        def __init__(self, name, age):
            """对象实例化的时候自动触发"""
            self.name = name
            self.age = age
    
        def __str__(self):
            print('打印的时候自动触发,但是其实不需要print即可打印')
            return f'{self.name}:{self.age}'  # 如果不返回字符串类型,则会报错
    
    
    obj = Foo('nick', 18)
    
    print(obj)  # obj.__str__() # 打印的时候就是在打印返回值
    
    打印的时候自动触发,但是其实不需要print即可打印
    nick:18
    
    obj2 = Foo('tank', 30)
    print(obj2)
    
    打印的时候自动触发,但是其实不需要print即可打印
    tank:30
    

    二、__repr__

    • str函数或者print函数--->obj.__str__()

    • repr或者交互式解释器--->obj.__repr__()

    • 如果__str__没有被定义,那么就会使用__repr__来代替输出

    • 注意:这俩方法的返回值必须是字符串,否则抛出异常

    class School:
        def __init__(self, name, addr, type):
            self.name = name
            self.addr = addr
            self.type = type
    
        def __repr__(self):
            return 'School(%s,%s)' % (self.name, self.addr)
    
        def __str__(self):
            return '(%s,%s)' % (self.name, self.addr)
    
    
    s1 = School('oldboy1', '北京', '私立')
    
    print('from repr: ', repr(s1))
    
    from repr:  School(oldboy1,北京)
    
    print('from str: ', str(s1))
    
    from str:  (oldboy1,北京)
    
    print(s1)
    
    (oldboy1,北京)
    
    s1  # jupyter属于交互式
    
    School(oldboy1,北京)
  • 相关阅读:
    Linux下安装Readis
    windows下的Redis安装:
    解决@ResponseBody不能和 <mvc:annotation-driven>同时使用的问题
    dom4j操作XML
    Ajax优缺点
    来一打前端博客压压惊
    tinypng upload一键压缩上传工具,告别人肉
    手把手教你撸一个简易的 webpack
    前端路由简介以及vue-router实现原理
    JS 数据类型、赋值、深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/abdm-989/p/11912778.html
Copyright © 2011-2022 走看看