首页 > 编程语言 >python 魔术方法__str__及__repr__方法详解

python 魔术方法__str__及__repr__方法详解

时间:2022-11-02 20:00:31浏览次数:43  
标签:__ python self repr str print 方法

__str__ 方法 __repr__
__str__ 自定义类的时候__str__方法的作用。这个魔术方法__str__主要的作用是在print(实例对象)
的时候返回你指定的字符串,一般来说在定义类的时候不用重写这个方法的,但是在一些注重交互的模块类的
编写上,可能会重写这个类。如果当前的类没有定义__str__方法默认集成 object 父类的__str__方法
__repr__()和__str__方法类似是 Python 类中的一个特殊方法,由 object 对象提供,
该方法主要实现 "内容描述" 功能:当直接打印类的实例化对象时,系统将会自动调用该方法,输出对象的
自我描述信息,用来告诉外界对象具有的状态信息

 class MyString:

     def __init__(self):
         pass

 a = MyString()
 print(a)
 此时输出的结果,是当前的类的实例,以及对应的内存地址

 <__main__.MyString object at 0x009DEE10>

使用__str__方法
 注意:这个方法必须要保证返回的是一个str类型的数据
 class MyString:

     def __init__(self,name):
         self.name = name
     def __str__(self):
         return self.name
 a = MyString("实例的name:")
 print(a)

输出结果:
输出结果,当前实例的名称来源于 __str__方法定义的返回值
# 实例的name:

 总结: 可以看到,这个时候print(实例),将会出现我们指定好的str内容。这就是__str__()方法的用处

 

__repr__方法 :
 class MyClass:

     def __repr__(self):

         return "hello 你好 "

 m = MyClass()
# 输出结果:hello 你好
 print(m)

 

_repr__ 方法 和 __str__方法同时存在:


 class MyClass:

     def __str__(self):

         return "hello word---1"

     def __repr__(self):

         return "hello word---2"

 m = MyClass()
 print(m)

 

 m = MyClass()
print(m)

可以看到str的优先级比repr方法要高.在没有str方法时会自动调用repr方法
两个方法都不存在时,则继承 object 的__str__ 方法
输出结果: hello word---1
 
 

标签:__,python,self,repr,str,print,方法
From: https://www.cnblogs.com/manxingsir/p/16852216.html

相关文章

  • Java可以如何实现文件变动的监听
    Java可以如何实现文件变动的监听应用中使用logback作为日志输出组件的话,大部分会去配置​​logback.xml​​这个文件,而且生产环境下,直接去修改logback.xml文件中的日志级......
  • 波司登的高端化后遗症
    (题图)文|螳螂观察作者|青月受“三重”拉尼娜现象的影响,2022年冬天可能会因为阶段性冷空气的影响出现阶段性低温,且极端寒潮爆发的可能性大。极端天气越来越多,年年冷冬,有望催......
  • IDEA新建模块为灰色(解决办法)
    问题:造成这个的原因可能是idea忽略了maven模块,可以尝试如下解决方法:菜单file中选择setting,搜索maven,然后选择IgnoredFiless,看右边的面板中变灰的maven模块是否处于勾选......
  • 【音视频会议】深入理解janus中的plugin管理
    janus中的plugin是其非常重要的一部分内容,今天我们就来对这块内容做一下分析,看看janus是如何实现plugin的,以及它的工作原理是怎样的。janus的架构模型janus的最大特色就......
  • C++——sqrt函数基本使用方法
    一、sqrt函数作用sqrt是用来求一个数的开根的,等同于开根号。二、使用时需要的头文件#include<cmath> 三、基本用法及注意事项sqrt(需要开根的内容)sqrt函数只能对dou......
  • kubectl get pod -w
    -w,--watch=false:Afterlisting/gettingtherequestedobject,watchforchanges.Uninitializedobjectsareexcludedifnoobjectnameisprovided.--w......
  • error in ./src/assets/images/logo.png报错
    vue项目启动执行时报错找不到图片,errorin./src/assets/images/logo.png解决:先卸载再重新安装image-webpack-loadernpmuninstallimage-webpack-loadercnpminsta......
  • Hadoop安装-分布式-Fully
    Hadoop安装-分布式-Fully〇、所需资料一、配置1、基础配置(1)系统安装(2)hostname主机名配置(3)ip地址、dns、hosts映射文件配置(4)关闭防火墙与selinux(5)开启ntpd时钟同步......
  • 实验四:类与数组、指针
    实验任务五vectorInt.hpp#pragma#include<iostream>usingstd::cout;usingstd::endl;classvectorInt{public:vectorInt(intn);vectorInt......
  • 前端无侵入埋点原理
    其实就是利用了浏览器提供的底层能力/钩子,可以通过js监听前端项目整体的promise错误,监听js错误,监听资源加载失败错误;然后还能监听所有的接口请求,包括F12里network的所有数......