python魔术方法str_python 魔术方法(三)对象的打印 -- __repr__ 与 __str__
默认实现
如果我们没有实现两个方法的任何一个,会打印出什么呢?
import logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - [line:%(lineno)d] - %(levelname)s: %(message)s')
class TechlogTest:
# def __str__(self):
# return "TechlogTest.__str__"
#
# def __repr__(self):
# return "TechlogTest.__repr__"
pass
if __name__ == '__main__':
testobj = TechlogTest()
print('%%r: %r; %%s: %s' % (testobj, testobj))
logging.info(testobj)
print(testobj)
print([testobj])
打印出了:%r: <__main__.techlogtest>; %s: <__main__.techlogtest>
[<__main__.techlogtest>]
我们看到,默认的实现方式通常不是我们想要的,他仅仅展示了对象在内存中的逻辑地址
只实现 __str__
import logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - [line:%(lineno)d] - %(levelname)s: %(message)s')
class TechlogTest:
def __str__(self):
return "TechlogTest.__str__"
# def __repr__(self):
# return "TechlogTest.__repr__"
pass
if __name__ == '__main__':
testobj = TechlogTest()
print('%%r: %r; %%s: %s' % (testobj, testobj))
logging.info(testobj)
print(testobj)
print([testobj])
输出了:%r: <__main__.techlogtest>; %s: TechlogTest.__str__
2019-04-07 21:01:30,321 - [line:20] - INFO: TechlogTest.__str__
TechlogTest.__str__
[<__main__.techlogtest>]
我们看到,原本需要调用 __repr__ 变成了系统的默认实现
只实现 __repr__
import logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - [line:%(lineno)d] - %(levelname)s: %(message)s')
class TechlogTest:
# def __str__(self):
# return "TechlogTest.__str__"
def __repr__(self):
return "TechlogTest.__repr__"
pass
if __name__ == '__main__':
testobj = TechlogTest()
print('%%r: %r; %%s: %s' % (testobj, testobj))
logging.info(testobj)
print(testobj)
print([testobj])
打印出了:%r: TechlogTest.__repr__; %s: TechlogTest.__repr__
2019-04-07 21:02:37,489 - [line:20] - INFO: TechlogTest.__repr__
TechlogTest.__repr__
[TechlogTest.__repr__]
所有需要调用 __str__ 的地方都改为调用了我们实现的 __repr__
python魔术方法str_python 魔术方法(三)对象的打印 -- __repr__ 与 __str__相关推荐
- Python入门基础(6)--面向对象/类和对象/魔术方法
面向对象基本概述 面向对象(Object Oriented Programming,OOP)编程:扩展性更强.可读性更好.面向对象的编程将数据和操作数据封装到对象中,组织代码和数据的方式更接近人的思维 ...
- 详细介绍Python中的“魔术方法“__XXX___; 概述__str__()方法;__new__()方法; 三. __ new__ 和__init__的区别
概述 一.__str__方法 当不用__str__()时: 发现输出结果只有对象一串id地址信息; 当我们想打印出更多信息时,用__str__()方法; 二.new()方法 三. __ new__ 和 ...
- Python最会变魔术的魔术方法,我觉得是它
在上篇文章中,我有一个核心的发现:Python 内置类型的特殊方法(含魔术方法与其它方法)由 C 语言独立实现,在 Python 层面不存在调用关系. 但是,文中也提到了一个例外:一个非常神秘的魔术方 ...
- Python学习笔记1:数据模型和特殊方法(魔术方法)
首先不要脸的放上个人网站:www.comingnext.cn 1.关于数据模型 在Python的官方文档中是这样说的: 对象是Python对数据的抽象.Python程序中所有数据都由对象或对象之间的关 ...
- Python世界里的魔术方法(一)
序言 传说中,Python对象天生具有一些神奇的方法,它们具有一些魔力,因此它们总被双下划线所包围着.这些方法统称为魔术方法.在特定的操作下,这些魔术方法会被自动调用,并且表现出许多神奇的现象. 它们 ...
- Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类
目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...
- python次方运算_neg__python 魔术方法1 运算符重载
python中存在一些特殊的方法,这些方法通常采用格式:__method__().这些方法会在特定的情况下自动调用.例如:__new__().__init__().__del__() 等生命周期方法. ...
- php对象魔术方法,php学习之类与对象的魔术方法的使用
原标题:php学习之类与对象的魔术方法的使用 魔术方法有哪些 __construct:构造方法 __destuct:析构方法 __call:在对象中调用一个不可访问的方法时.__call()会被调用 ...
- python基础之类的属性方法、魔术方法普通方法
类的定义.调用方法.引用属性 类的属性和方法 类的属性 类属性的访问 类属性可以直接访问,无需实例化 类属性也可以通过实例来访问 实际上,所有的实例是共享类属性的 类属性的修改 修改了类属性后,对应的 ...
最新文章
- C语言实现Hanoi算法塔的功能(附完整源码)
- 《MANAGING THE DEVELOPMENT OF LARGE SOFTWARE SYSTEMS》总结
- 整型数组 判断 java,给定一个整数数组,判断其中是否有3个数和为N
- python提取txt数据到excel_python 读取txt中每行数据,并且保存到excel中的实例
- 实木地板被机器人弄成坑_实木地板的常规保养
- mysql完成字符串分割
- php小程序支付notify,PHP 小程序支付
- vim编辑python_Python3基础知识——Vi/Vim编辑器的使用,大神们都在用的
- mysql odbc连接池_Java Mysql连接池配置和案例分析--超时异常和处理
- 一个简单的txt读取与导出
- SPSS中介效应分析(Process和mediate插件)
- 机器学习:学习的分类
- Codechef:Walk on Tree/TREEWALK(Berlekamp-Massey算法)
- mysql多表查询数值为空null时处理成0
- 自己努力要学习啦(android的很多demo 总有你需要的)
- 统计学习方法——统计学习的分类
- 1. 工业大数据的内涵
- uefi启动解析:由原理到实例
- android如何在app端设置USB调试模式
- Hudi Compaction