首页 > Python > 类特殊成员(属性和方法)
Python __repr__()方法:显示属性
前面章节中,我们经常会直接输出类的实例化对象,例如:
那么,有没有可能自定义输出实例化对象时的信息呢?答案是肯定,通过重写类的 __repr__() 方法即可。事实上,当我们输出某个实例化对象时,其调用的就是该对象的 __repr__() 方法,输出的是该方法的返回值。
以本节开头的程序为例,执行 print(clangs) 等同于执行 print(clangs.__repr__()),程序的输出结果是一样的(输出的内存地址可能不同)。
和 __init__(self) 的性质一样,Python 中的每个类都包含 __repr__() 方法,因为 object 类包含 __reper__() 方法,而 Python 中所有的类都直接或间接继承自 object 类。
默认情况下,__repr__() 会返回和调用者有关的 “类名+object at+内存地址”信息。当然,我们还可以通过在类中重写这个方法,从而实现当输出实例化对象时,输出我们想要的信息。
举个例子:
class CLanguage: pass clangs = CLanguage() print(clangs)程序运行结果为:
<__main__.CLanguage object at 0x000001A7275221D0>
通常情况下,直接输出某个实例化对象,本意往往是想了解该对象的基本信息,例如该对象有哪些属性,它们的值各是多少等等。但默认情况下,我们得到的信息只会是“类名+object at+内存地址”,对我们了解该实例化对象帮助不大。那么,有没有可能自定义输出实例化对象时的信息呢?答案是肯定,通过重写类的 __repr__() 方法即可。事实上,当我们输出某个实例化对象时,其调用的就是该对象的 __repr__() 方法,输出的是该方法的返回值。
以本节开头的程序为例,执行 print(clangs) 等同于执行 print(clangs.__repr__()),程序的输出结果是一样的(输出的内存地址可能不同)。
和 __init__(self) 的性质一样,Python 中的每个类都包含 __repr__() 方法,因为 object 类包含 __reper__() 方法,而 Python 中所有的类都直接或间接继承自 object 类。
默认情况下,__repr__() 会返回和调用者有关的 “类名+object at+内存地址”信息。当然,我们还可以通过在类中重写这个方法,从而实现当输出实例化对象时,输出我们想要的信息。
举个例子:
class CLanguage: def __init__(self): self.name = "新宝库" self.add = "https://www.xinbaoku.com" def __repr__(self): return "CLanguage[name="+ self.name +",add=" + self.add +"]" clangs = CLanguage() print(clangs)程序运行结果为:
CLanguage[name=新宝库,add=https://www.xinbaoku.com]
由此可见,__repr__() 方法是类的实例化对象用来做“自我介绍”的方法,默认情况下,它会返回当前对象的“类名+object at+内存地址”,而如果对该方法进行重写,可以为其制作自定义的自我描述信息。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算