Python3 print 变量打印输出功能后面隐含的几个知识点
☞ ░ 前往老猿Python博客 ░
在 Python3 中,无论是基础数据类型如列表、字典、元组、迭代类型等,还是 Python 提供的类实例变量或自定义类的实例变量,全都可以用 print 进行输出,也全可以通过 str 函数转换成字符串信息。而在 C 语言中可不是这样,这里面涉及到几个重要的知识点,下面老猿就为大家解释一下。
知识点一:Python3 所有类型都是类
在 Python 3 中,已不再区分类和类型了,类就是类型,类型就是类,如 int 型就是 class(int),我们来看看 int 类型的类属性:
知识点二:Python3 中所有自定义类都是 object 类的子类
除了 Python 定义好的基本类型,所有自定义类都是 Python3 的 object 类的派生子类。我们来举例看看:
可以看到通过实例__class__
属性得到类名,通过类的__base_
属性可以得到其父类名,可以看到自定义类的都是从 object 派生的。
知识点三:所有类型及类都有__str__
和__repr__
实例方法
从上面的 int 类型和自定义类类型的实例属性中,都可以看到__str__
和__repr__
这两个属性,这两个属性实际上是两个实例方法,自定义类默认继承 object 类的这 2 个实例方法。
Python 中__str__
方法是为了给最终用户提供实例对象信息,__repr__
方法是给开发人员提供实例对象信息。__str__
应该提供用户容易理解的信息,将属性代码翻译成客户理解的文字说明,__repr__
应该提供开发者容易使用的信息,最好是能够直接使用输出的信息直接拷贝部分或全部就能重定义一个对象,这些信息类似于集成环境下 debug 看内存数据对象的格式差不多。
知识点四:str(变量)进行类型转换时返回的字符串是实例方法__str__
返回的内容
知识点五:在 print(变量)时输出的是实例方法__str__
函数返回的内容
我们看案例:
可以看到,由于定义了__str__
方法打印输出或进行 str(变量)转换时与前面的案例发生了变化。
知识点六:自定义类对__str__
与__repr__
方法的处理
如果自定义类自己重写了
__str__
与__repr__
方法,则会按重写的方法执行;如果自定义类没有定义
__str__
方法但定义了__repr__
方法,调用__str__
方法实际上会调用__repr__
方法输出;如果自定义类没有定义
__repr__
方法但定义了__str__
方法,调用__str__
方法会按重写的方法执行,调用__repr__
方法实际上会调用 obejct 类的__repr__
方法;如果自定义类没有重写了
__str__
与__repr__
方法,则会按 object 类的__str__
与__repr__
方法执行。
小结:
本文介绍了 Python3 print(变量)打印输出或 str 将其他类型转换成字符串后面隐含的至少 6 个知识点,类的实例对象输出或进行字符串转换时都会调用类的__str__
方法,正是由于 Python 在类的实现上的这些隐含机制,使得 Python 能很方便的输出变量数据。
更多关于这方面的知识,请参考如下博文:
对于缺乏 Python 基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习 Python。
如对文章内容存在疑问,可在博客评论区留言,或关注:老猿 Python 微信公号发消息咨询。
版权声明: 本文为 InfoQ 作者【老猿Python】的原创文章。
原文链接:【http://xie.infoq.cn/article/48a67b6499c1cb0655bde6817】。文章转载请联系作者。
评论