zoukankan      html  css  js  c++  java
  • \_\_str\_\_和\_\_repr\_\_

    __str__和__repr__

    一、__str__

    • 打印时触发
    class Foo:
        pass
    
    
    obj = Foo()
    print(obj)
    
    dic = {'a': 1}  # d = dict({'x':1})
    print(dic)
    
    

    <__main__.Foo object at 0x10d2b8f98>

    {'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('randy', 18)
    print(obj)  # obj.__str__() # 打印的时候就是在打印返回值
    
    
    obj2 = Foo('laowang', 30)
    print(obj2)
    
    

    打印的时候自动触发,但是其实不需要print即可打印

    randy:18

    打印的时候自动触发,但是其实不需要print即可打印
    laowang: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('hnnu', 'hn', 'gongyou')
    
    s1  # jupyter属于交互式
    School(hnnu,hn)
    
  • 相关阅读:
    TLE: poj 1011 Sticks
    UVa 116 Unidirectional TSP
    csuoj 1215 稳定排序
    UVa 103 Stacking Boxes
    UVa 147 Dollars
    UVa 111 History Grading
    怎么在ASP.NET 2.0中使用Membership
    asp.net中如何删除cookie?
    ASP.NET中的HTTP模块和处理程序[收藏]
    NET开发中的一些小技巧
  • 原文地址:https://www.cnblogs.com/randysun/p/12252635.html
Copyright © 2011-2022 走看看