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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,370评论 4 16
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,252评论 8 265
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,578评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,438评论 6 13
  • “你在干嘛呢?” “我在泡温泉,昨天朋友过生日,酒喝多了,被他们稀里糊涂带到这里的!” “还不如出来我给你开个房间...
    谷子地阅读 494评论 0 2

友情链接更多精彩内容