博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
__str__和__repr__
阅读量:4691 次
发布时间:2019-06-09

本文共 1294 字,大约阅读时间需要 4 分钟。

目录

一、__str__

  • 打印时触发
class Foo:    passobj = 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,北京)

转载于:https://www.cnblogs.com/nickchen121/p/10990811.html

你可能感兴趣的文章
软件测试
查看>>
[整理]在命令行执行 UIAutomation
查看>>
Overlapping Rectangles
查看>>
新浪IP库地址
查看>>
centos7 eclispe 编译C++遇到的问题总结
查看>>
1-ML的基本概念
查看>>
自动附加Sqlserver数据库
查看>>
02.设计模式
查看>>
LeetCode 371. Sum of Two Integers
查看>>
ZBrush功能特性之法线贴图
查看>>
virtualbox虚拟机ubuntu操作系统,设置网络互通、访问,能访问虚拟机swoole的http服务...
查看>>
磁盘inode节点被占满的解决方法
查看>>
js 中对象属性的特性
查看>>
周四的工作 张孝祖
查看>>
怎么教软件工程课的看法
查看>>
mac下mysql安装及配置启动
查看>>
PAT 甲级 1020 Tree Traversals (二叉树遍历)
查看>>
安全增强 Linux (SELinux) 剖析
查看>>
防御性编程
查看>>
软件开发工程师必须知道的20个常识
查看>>