美文网首页
Python基础21-面向对象(系统内置方法1-信息格式化操作)

Python基础21-面向对象(系统内置方法1-信息格式化操作)

作者: Jacob_LJ | 来源:发表于2018-05-22 22:27 被阅读13次

    Python基础-面向对象(方法)

    1 信息格式化操作

    1.1 __str__

    作用
        一个对象的描述字符串, 更加方便用户阅读, 对用户更友好(属性值之类的)
    触发方式
        print 打印一个对象时
        str() 函数时
    格式
        def __str__(self):
              return "描述信息"
    
    class Person:
        def __init__(self, n, a):
            self.name = n
            self.age = a
    
        def __str__(self):
            return "这个人的姓名是%s, 这个人的年龄是:%s" % (self.name, self.age)
    
    p1 = Person("fkm", 18)
    # print(p1.name)
    # print(p1.age)
    print(p1) 
    
    # 不适用 __str__ 时,打印结果是:<__main__.Person object at 0x10a9e4630>
    # 使用后,打印结果:这个人的姓名是fkm, 这个人的年龄是:18
    
    #触发方式二
    s = str(p1)
    print(s, type(s)) # 这个人的姓名是fkm, 这个人的年龄是:18 <class 'str'>
    

    1.2 __repr__**

    作用
        一个对象的描述字符串, 更加方便机器处理, 对机器更友好(开发人员查看,实际类型和地址等)
    触发方式
        当我们在交互模式下, 直接执行某个变量, 就会输出对应信息
        repr() 函数时
    格式
        def __repr__(self):
        return "描述信息"
    注意
        一般情况下, 应满足如下等式
            obj == eval(repr(obj))
        或者描述一个实例详细的信息(类名等等)
    
    • 通常通过以下方式
    print(repr(p1)) # <__main__.Person object at 0x10a9e4630>
    
    • 重写repr 描述
    class Person:
        def __init__(self, n, a):
            self.name = n
            self.age = a
    
        def __repr__(self):
            return "reprxxxxx"
    
    p1 = Person("fkm", 18)
    print(p1) # reprxxxxx
    
    s = str(p1)
    print(s, type(s)) # reprxxxxx <class 'str'>
    
    print(repr(p1)) # reprxxxxx
    
    • 如果同时重写strrepr
      会优先寻找__str__,如果没有重写,则找__repr__,都没有就按照系统默认的
    class Person:
        def __init__(self, n, a):
            self.name = n
            self.age = a
    
        def __str__(self):
            return "这个人的姓名是%s, 这个人的年龄是:%s" % (self.name, self.age)
    
        def __repr__(self):
            return "reprxxxxx"
    
    p1 = Person("fkm", 18)
    print(p1) # 这个人的姓名是fkm, 这个人的年龄是:18
    
    s = str(p1)
    print(s, type(s)) # 这个人的姓名是fkm, 这个人的年龄是:18 <class 'str'>
    
    print(repr(p1)) # reprxxxxx
    
    • repr 交互模式下的触发


    3 __str__ 和 __repr__使用区别

    import datetime
    
    t = datetime.datetime.now()
    print(t) # 面向用户
    print(repr(t)) # 面向开发者
    
    tmp = repr(t)
    result = eval(tmp) # 通过 eval 将__repr__面向开发者的对象,转为面向用户
    print(result)
    
    >>> 打印结果
    2018-05-21 20:57:55.731912
    datetime.datetime(2018, 5, 21, 20, 57, 55, 731912)
    2018-05-21 20:57:55.731912
    
    

    相关文章

      网友评论

          本文标题:Python基础21-面向对象(系统内置方法1-信息格式化操作)

          本文链接:https://www.haomeiwen.com/subject/lfnzdftx.html