先抛出一个问题,之前有朋友问的:

import numpy as npif __name__ == '__main__':a = np.array([1, 2, 3], dtype=np.int32)print('a: %d' % a)

这个问题其实很简单啦,%d表示数字,而numpy.ndarray是复杂类型的对象,肯定转不了数字啦,但是可以转成字符串,所以应该用%s,即:

import numpy as npif __name__ == '__main__':a = np.array([1, 2, 3], dtype=np.int32)print('a: %s' % a)

不过对象是怎么转成字符串的呢?

如果是显示转换,调用内置函数str,比如直接a_str = str(a),那我们自己写的类需要做什么工作来支持呢,先去查一下python库文档里的str函数,看看它怎么说的。关键就是下面红框里的这一段了

也就是说我们自己写的类,要实现一个__str__()的函数。如果没有实现这个方法,那就会转而去调repr(object),那repr又需要我们实现什么方法呢?再去看它的说明:

需要我们实现的是__repr__()方法。

接下来我们直接试一下:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f'str: name: {self.name}, age: {self.age}'def __repr__(self):return f'repr: name: {self.name}, age: {self.age}'if __name__ == '__main__':person = Person('Tom', 10)person_str = str(person)print(person)

__str__(), __repr__()都实现了,开头打印的内容不一样,我们看看会调哪个

跟库文档上说的一样,会先调__str__

接下来把__str__注释掉,再运行一下

class Person:def __init__(self, name, age):self.name = nameself.age = age# def __str__(self):#     return f'str: name: {self.name}, age: {self.age}'def __repr__(self):return f'repr: name: {self.name}, age: {self.age}'if __name__ == '__main__':person = Person('Tom', 10)person_str = str(person)print(person)

就变成调__repr__啦。

不过我们上面说的这些都是显示转换,但是对象是可以直接print的啊,并不需要先显示转成字符串再print,比如直接print(person),肯定是可以的,那我们再看一下print的说明:

所以调print的时候,是会自动调str()转成字符串的,对于格式化字符串里的%s也是一样,如下

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f'str: name: {self.name}, age: {self.age}'def __repr__(self):return f'repr: name: {self.name}, age: {self.age}'if __name__ == '__main__':person = Person('Tom', 10)print(person)print('person: %s' % person)

但是如果我自己写的类都没实现这两个方法,难道它就不能被print了吗?或者说它就不能转字符串了吗?肯定可以啊,把这两个方法都删了试一下

class Person:def __init__(self, name, age):self.name = nameself.age = ageif __name__ == '__main__':person = Person('Tom', 10)print(person)

打印出来的就是类型信息、对象地址信息。

但是如果想在日志中打印一些调试信息,以便了解各个对象具体的值都是什么,难道我把要所有自己写的类都实现一下__str__方法吗?

其实也不一定要这样,比如我就想让所有的属性都打出来,方便调试,你可以直接把对象转成json就可以打印啦。

不过普通对象转json也需要自己去实现一些方法,但是如果如上面所说,我就是想让所有属性都打出来,只是为了方法调试,那可以借用object的__dict__属性来实现:

import jsonclass Car:def __init__(self, brand, price):self.brand = brandself.price = priceclass Person:def __init__(self, name, age, car):self.name = nameself.age = ageself.car = carif __name__ == '__main__':car = Car('benz', 1000000)person = Person('Tom', 10, car)json_str = json.dumps(person, default=lambda obj: obj.__dict__)print(json_str)

可以看到,不但能把Person类的属性打出来,还能把Car的属性也都打出来哦。

python对象怎么打印出来相关推荐

  1. python pprint_如何美观地打印 Python 对象?这个标准库可以简单实现

    ♚ 豌豆花下猫,某985高校毕业生, 兼具极客思维与人文情怀 .专注python技术.数据科学和深度学习,力图创造一个有趣又有用的学习分享平台. 前不久,我回顾了 Python 中 print 的发展 ...

  2. 独家|测量、建议、快速上手!你所使用的Python对象占用了多少内存?(附代码)...

    作者:Gigi Sayfan 翻译:吴振东 校对:吴金笛 本文约3300字,建议阅读10分钟. 本文将介绍多种Python对象分别所占用的内存,并解释所选择的测量方法和函数,为节省内存提供建议. Py ...

  3. Python对象基础

    类 定义操作 # 1. 定义类class Washer():def wash(self):print('我会洗⾐服')def print_info(self):# 类⾥⾯获取实例属性print(f'h ...

  4. Python程序可打印今天的年,月和日

    In the below example – we are implementing a python program to print the current/ today's year, mont ...

  5. python 类定义 垃圾_什么是python对象摧毁?python中的对象摧毁(垃圾回收)机制是什么?...

    在这篇文章之中我们来了解一下python对象摧毁(垃圾回收),对于刚刚接触到python这一编程语言的朋友来说,对于python对象摧毁(垃圾回收)的了解应该比较少,并且不清楚关于python垃圾回收 ...

  6. python使用logging打印信息到日志文件中

    python使用logging打印信息到日志文件中 参考 Python输出日志信息 Python + logging 输出到屏幕,将log日志写入文件 使用logging打印日志到文件中的目的是: 解 ...

  7. python对象类型及其运算 数字 字符串 list dict tupe dict

    python内置对象的类型及其所支持的运算 我们在编程时为什么要使用内置对象类型,以及我们在编程时尽可能使用自定义类型呢还是但凡有可能都去使用内置类型.很显然,对于python而言,内置类型更容易理解 ...

  8. python——pickle模块(用于Python对象的持久化存储)

    pickle模块介绍 pickle是一种用于存储的持久化技术 首先从英文来理解一下这个模块:pickle 是腌渍的意思,也就是把东西腌起来保存成文件,要用的时候读出来洗洗还能用. 专业点的说法是:pi ...

  9. python将一个json字典转换为一个python对象

    python将一个json字典转换为一个python对象 示例代码: from collections import OrderedDict import jsondata = '{"nam ...

最新文章

  1. bzoj3791作业*
  2. 安卓高手之路之图形系统(6)ListView继续
  3. POJ1118 HDU1432 Lining Up
  4. 【风控术语】数字金融欺诈行为名词表
  5. openpyxl 插入列_[Python]Excel编程(openpyxl)学习笔记
  6. gridlayout布局单元格宽度设置_安卓界面布局之线性布局
  7. iOS中 点击按钮无响应
  8. python中def fun()是什么意思_python def 定义函数,调用函数方式
  9. 金蝶迷你版凭证导入工具_金蝶kis迷你版如何插入凭证?
  10. imagebutton图片缩放
  11. 大雁牌计算机在线使用,用大雁牌计算器解决有关计算问题.doc
  12. PLC通讯实现-C#访问OpcUa实现读写PLC(十)
  13. python 对中文文件求交集、并集、差集
  14. Ubuntu上实现蓝牙串口通讯(SPP)
  15. 为什么你不想学习?只想玩?人是如何一步一步废掉的
  16. texstudio 使用方法_Texstudio使用技巧——基于个人
  17. 塑料疑云还是认知返祖?从荣耀9X看大小手机厂商之间的天堑
  18. 【快速检索,稳定出版,强大委员会Speaker阵容】ICCCS 2022|第7届通信计算机大会
  19. 汉字转换为拼音的JavaScript库
  20. 软件设计师每日一练真题笔记

热门文章

  1. InvalidateRect() 与 Invalidate()函数
  2. kafka配置文件 中文乱码_使用kafka consumer api时,中文乱码问题
  3. WEB12_HttpTomcat
  4. 使用sortable的踩坑记录
  5. 中小企业如何选择仓库管理软件?看这一篇就够了
  6. 避免 IoT 物联网项目走向失败的 6 大技巧
  7. 记事本带计算机手机版,有什么手机和电脑能同步的便签记事本
  8. 如何在线压缩图片至200K?图片压缩用什么?
  9. sscom AT命令写IMEI号
  10. undefined reference to `_Unwind_Resume'