首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python 魔术方法(三)对象打印 -- __repr__ 与 __str__

python 魔术方法(二) 对象创建与单例模式实现 但有另外两个常用魔术方法也一样困扰着很多 Python 程序员,那就是本文将介绍用于对象字符串化两个方法 — __repr__ 和 __str...__repr__] 事实上,上面的例子已经展现了两个方法设计原则上不同: %r 设计用来展示对象细节,此时调用是 __repr__ 方法 %s 用来为用户展示友好可读信息,这与 str 方法以及...logging 打印日志目的一致,此时调用是 __str__ 方法 容器 __str__ 方法调用是每一个成员 __repr__ 方法 3....结论 我们看到,默认方式通常并不是我们想要,而如果我们只实现了 __repr__,那么所有需要使用 __str__ 场景都会去调用 __repr__ 因此,实践中建议是,为每个类都实现 __repr...例如下面定义 IP 类,__repr__ 方法用于在 log 等场景中打印类内成员详情,而 __str__ 则用于将 IP 值转化为点分十进制方式用于友好输出。

40120

测开之《__repr__和__str__方法使用

文章总览图 使用str函数或者print打印对象时会优先触发str方法,没定义str方法情况下,会再去找repr方法,如果都没有,那么就会去找父类str方法。...在交互环境下输入对象和直接通过repr这个内置函数处理对象时候,它只会触发repr方法,如果repr方法不存在,会找父类repr方法,不会去找str方法。 repr方法是str方法备胎。...用内置函数format把这个对象传进去。它也能触发。 这个print(m)打印出来它返回内容。...print打印是由str方法决定,交互环境下是由repr方法决定。...(m) # str(m) # format(m) res=repr(m) print(res) 如果str方法不存在,会去触发repr方法,打印repr方法内容: 三、什么使用str方法,什么时候用

41230
您找到你想要的搜索结果了吗?
是的
没有找到

python yaml用法详解

YAML是一种直观能够被电脑识别的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash数据是很简单有效。...文档,你可以使用yaml.load_all来解析全部文档。...使用缩进表示层级关系 3. 缩进不允许使用Tab,只允许使用空格 4....),让你把yaml节点转为Python对象实例,用表示器(也就是代码里 repr() 函数)来让你把Python对象转为yaml节点,看代码: import yaml class Person(yaml.YAMLObject...你可能在使用过程中并不想通过上面这种元类方式,而是想定义正常类,那么,可以用这两种方法 import yaml class Person(object): def __init__

11.8K21

Python 配置文件 yaml 用法详解

YAML是一种直观能够被电脑识别的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash数据是很简单有效。...文档,你可以使用yaml.load_all来解析全部文档。...使用缩进表示层级关系 3. 缩进不允许使用Tab,只允许使用空格 4....,让你把yaml节点转为Python对象实例,用表示器(也就是代码里 repr() 函数)来让你把Python对象转为yaml节点,看代码: import yaml class Person(yaml.YAMLObject...你可能在使用过程中并不想通过上面这种元类方式,而是想定义正常类,那么,可以用这两种方法 import yaml class Person(object): def __init__

77110

python笔记70 - Python中__repr__和__str__区别

前言 Python中__repr__和__str__使用区别 __repr__ 使用 很多时候我们在创建一个类时候,在终端打印实例,看到是一个类似于这样内容:<XXX object at 0x0000000001222E10...__str__ 使用 __str__方法是在print()打印时候输出给用户看,面向是普通用户,方便用户知道返回是什么实例对象。...__repr__和__str__这两个方法都是用于显示,__str__是面向用户,而__repr__面向开发者 关于调用两种方法时机 使用print() 使用%s和f’{}’拼接对象 使用str...(x)转换对象x 在上述三种场景中,会优先调用对象__str__()方法;若没有,就调用__repr__()方法;若再没有,则显示其内存地址。...特别地,对于下面两种场景: 用%r进行字符串拼接repr(x)转换对象x 则会调用这个对象__repr__()方法;若没有,则不再看其是否有__str__()方法,而是显示其内存地址。

35440

Python终极调试指南

使用 Logging 模块 如果你编写应用程序没有使用日志功能,那你终究会后悔没有及时用它。如果应用程序中没有打印任何运行日志,就很难对程序错误进行故障定位及排除。...如果使用YAML 配置文件,最简单地加载配置方法如下所示: import yaml from logging import config with open("config.yaml", 'rt...(c) # Circle(100, 80, 30) 如果不希望或不能像上面那样表示对象,另一个好方法是使用<......除了 repr 以外,重写 str 方法也是一个好方法,该方法在使用 print(instance) 被默认调用。使用这两种方法,你只需打印变量即可获得很多信息。...在上面的示例中,我们使用 p 命令打印变量,并使用 l 命令列出代码。

68810

一文让你彻底搞懂`__str__`和`__repr__`?

如果没有实现__repr__,当我们在控制台里打印一个向量实例,得到字符串可能会是 。...4") False 当x=4,当x为整数类型,调用str()和repr()返回结果是一样, 而当y为字符串类型repr(y)结果就是“正式”字符串表示,而str(y)结果则是“非正式”。...在 str() 函数被使用,或是在用 print 函数打印一个对象时候才被调用,并且它返回字符串对终端用户更友好。 3....__repr__ 目标是明确,所返回字符串应该准确、无歧义,并且尽可能表达出如何 用代码创建出这个被打印对象。...容器 __str__ 方法使用包含对象 __repr__ 参考资料: “Difference between __str__ and __repr__ in Python” Fluent Python

1.5K30

Python中__str__() 和 __repr__() 用法

在类定义中,我们通常会看到 __str__() 方法和 __repr__() 方法,那么这两个方法作用是什么以及如何使用他们呢?本文便来介绍下这两个方法。...我们发现,直接输出 today 对象和调用 print 函数打印 today 对象输出是不一样。...这是因为调用 print 函数打印 today 对象隐式调用了 str() 方法,而 str() 方法会隐式地调用对象 __str__() 方法。...总结 当自定义类中没有定义 __str__() 和 __repr__() ,在进行对象输出,会调用默认 __str__() 和 __repr__() ;当类中只包含 __str__() ,调用...print() 函数进行对象输出,会调用 __str__(),直接输出调用默认 __repr__();当类中既包含 __str__() 又包含 __repr__() ,调用 print() 函数进行对象输出

52830

Python面向对象编程-魔术方法-__str__和__repr__方法

在Python面向对象编程中,魔术方法是一组特殊方法,用于在特定情况下调用对象操作。其中,__str__和__repr__方法是最常用魔术方法之一。...这两个方法都是用于打印对象字符串表示形式,但它们作用略有不同。__str__方法用于在print语句中打印对象字符串表示形式。...# 使用__str__方法打印对象可读性更好表示形式print(obj) # 输出: Alice is 25 years old.# 使用__repr__方法打印对象字符串表示形式print(repr...接着,我们实现了__str__和__repr__方法。在__str__方法中,我们返回了一个字符串,描述了该对象可读性更好表示形式。...最后,我们创建了一个MyClass对象obj,并使用print语句和repr函数分别打印了它可读性更好表示形式和字符串表示形式。

22430

python3--面向对象进阶之内置方法

= list(args) l = List(1,2,3,4,5) print(l) 执行结果 打印对象内存地址,如果想要print(对象)显示字符串怎么办?...(b)  # 相当于 str(b)返回值 print(repr(a))  # 函数 打印repr返回值 print(repr(b))  # 函数 打印repr返回值 print(a....function Sam print执行时,是去内部寻找__str__方法,所以print没有输出不了数据,因为每一个对象都有__str__方法 当一个对象,没有指定属性和方法,则打印出内存地址...总结 当需要使用__str__场景找不到__str__就找__repr__ 当需要使用__repr__场景找不到__repr__时候就找父类__repr__ __repr__是__str...程序员在使用时无需关心内存分配和释放,因为此工作都是交给python解释器来执行,所以,析构函数调用是由解释器在进行垃圾回收自动触发执行

46810

Python面试题之Python中__repr__和__str__区别

上面打印对象并不是很友好,显示对象内存地址 # 下面我们重构下该类__repr__以及__str__,看看它们俩有啥区别 # 重构__repr__ class TestRepr(Test):...# 重构__repr__方法后,不管直接输出对象还是通过print打印信息都按我们__repr__方法中定义格式进行显示了 # 重构__str__ calss TestStr(Test):...# 你会发现,直接输出对象ts并没有按我们__str__方法中定义格式进行输出,而用print输出信息却改变了 __repr__和__str__这两个方法都是用于显示,__str__是面向用户...__repr__用于所有其他环境中:用于交互模式下提示回应以及repr函数,如果没有使用__str__,会使用print和str。...当我们想所有环境下都统一显示的话,可以重构__repr__方法;当我们想在不同环境下支持不同显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层__repr__来显示,实际上__str

42220

如何在 Python 中将对象打印为字符串?

方法一:使用 str() 函数Python 内置 str() 函数可以将对象转换为字符串格式。这个函数会调用对象 __str__() 方法来获取对象字符串表示形式。...这样可以使打印输出字符串更符合预期。如果没有在类中定义 __str__() 方法,str() 函数将调用对象 __repr__() 方法来获取字符串表示形式。...方法二:使用 repr() 函数Python 内置 repr() 函数可以将对象转换为可打印字符串格式。这个函数会调用对象 __repr__() 方法来获取对象字符串表示形式。...方法三:自定义 __str__() 和 __repr__() 方法除了使用内置 str() 和 repr() 函数,我们还可以在自定义类中直接定义 __str__() 和 __repr__() 方法来控制对象字符串表示形式...然后,我们创建了一个 Person 类实例 person,并分别使用 str(person) 和 repr(person) 将其转换为字符串格式。最后,我们打印输出转换后字符串表示形式。

1.2K30

1.UI自动化测试框架搭建-yaml文件管理定位元素

适用于Web、H5、IOS、安卓UI自动化测试 元素封装 对于一个需要定位元素,我们一般就需要用到它 描述、定位方式、定位语句、使用变量名 由于部分元素出现时间较长,增加一个等待时间 我们编写一个...self): return f'{self.desc}' 重写__str__方法是为了使用print打印时候可以显示指定内容 比如有个如下元素,使用print打印实例化对象就可以展示...registered", desc="挂号") print(registered) # 挂号:(By:xpath,element://p[text()="挂号"]) 后面在调试或者日志打印时候可以展示更易于阅读...我们只要在执行脚本前正确读取该yaml文件,并将它locators中元素一一使用Locator实例化,就可以使用了 读取yaml文件 path:yaml文件存放路径 with open(path..., 'r+', encoding='utf-8') as f: data_dict = yaml.load(f, Loader=yaml.FullLoader) or {} 将读取出来数据使用

50710

PyYAML反序列化漏洞

基础知识 Yaml简介 YAML是一种直观能够被电脑识别的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互,YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash数据是很简单有效...Yaml语法 基本规则 大小写敏感 使用缩进表示层级关系 缩进不允许使用Tab,只允许使用空格 缩进空格数目不重要,只要相同层级元素左对齐即可 # 表示注释,从它开始到行尾都被忽略 yaml...yaml.YAMLObject用元类来注册一个构造器(也就是代码里init() 方法),让你把yaml节点转为Python对象实例,用表示器(也就是代码里 repr() 函数)来让你把Python...load()进行序列化操作我们需要在方法里面加一个loader请求参数,直接使用load请求时会显示以下warning,默认FullLoader import yaml f = open('config.yml...从上面可以看到命令被成功执行,由此可见当使用ruamel.yaml.load()处理用户提供参数,易受RCE攻击~ 防御策略 在处理YAML数据过程中,可以使用以下函数来反序列化数据,避免RCE:

2K10

Python Every Class Needs a __repr__

一、思考 当我们在Python中定义一个类时候,如果我们通过print打印这个类实例化对象,或者我们直接输入这个类实例化对象会返回怎么样结果,如下代码: >>> class People(object...是python内置方法,并且当你在尝试去吧一个对象转换为一个字符串时候怎么调用这个str方法,如我们进行如下操作: >>> class People(object): ......__ vs __repr__ 在上面的代码中我们添加了str_方法之后,当我们将对象转换为字符串时候都会调用str方法,并得到我们自己定义内容,但是并没有影响到我们在python交互模式下直接输入对象返回内容...等容器中存储对象时候,我们打印看到都是repr内容,我们把上面的tom存到列表里, 然后打印查看如下: >>> print([tom]) [__repr__: people name is Tom...name is Tom' >>> tom __repr__: people name is Tom >>> 从这里我们发现当当你把对象进行字符串转换时候,就会先去找str方法,如果没有则再去找repr

35020

Python类专用方法

Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法由 Python 替你调用,而不是在代码中直接调用(象普通方法那样)。 .1    __init__ 类似于构造函数 #!...repr(obj)时候,会自动调用__repr__函数,该函数返回对象字符串表达式, 用于重建对象,如果eval(repr(obj))会得到一个对象拷贝。...有时,程序员希望定义一个类,要求它对象也能用print语句输出。Python类可定义特殊方法__str__,为类对象提供一个不正式字符串表示。...__str__() 程序如果将PhoneNumber对象传给内建函数str(如str(phone)),或者为PhoneNumber对象使用字符串格式化运算符%(例如"%s"%phone),Python...当你在类实例中使用 del ,Python 替你调用 __delitem__ 专用方法。

72810
领券