__str__、__repr__和__format__
- obj.__ str __ ()是面向用户的,该方法将实例转换为一个字符
- obj.__ repr __ ()面向程序员,该方法返回一个实例的代码表示形式,通常用来重新构造这个实例,repr()函数返回的字符串,和我们使用交互式显示的值是一样的,__ repr __ ()生成的文本字符串标准做法是需要让eval(repr(x)) == x为真
- obj.__ format __:自定制格式化字符串
- __str__和__repr__区别与联系:
- 上述两个方法返回值必须是字符串,否则抛出异常;
- 这两个方法都是自定义类的字符串描述,但是两个的调用机制不同:
- 使用str函数或者print函数会调用__str__;
- 使用repr函数或者交互式解释器时会调用__repr__;如果__str__没有被定义,那么就会使用__repr__来代替输出;当我们查看对象的时候会调用repr;列表以及字典等容器总是会使用 repr 方法。即使你显式的调用 str 方法,也是如此
>>> class Animal():
def __init__(self, name):
self.name = name
def __str__(self):
return '__str__ Animal'
def __repr__(self):
return '__repr__ Animal'
>>>
>>> animal = Animal('cat')
>>> animal
__repr__ Animal
>>> repr(animal)
'__repr__ Animal'
>>> str(animal)
'__str__ Animal'
>>> print(animal)
__str__ Animal
>>> str([animal])
'[__repr__ Animal]'
那么__str__和__repr__到底有什么不同呢?
>>> from datetime import datetime
>>> today = datetime.now()
>>> today
datetime.datetime(2019, 8, 2, 13, 38, 54, 71000)
>>> print(today)
2019-08-02 13:38:54.071000
观察上面的结果我们可以看出
__str__的结果可读性更强,__str__是面向用户的,因此返回的信息更清晰容易理解;
__repr__的结果更精确和详细,__repr__是面向程序员的,它存在的目的是为了调试,便于开发者使用。
class Animal():
def __str__(self):
return 'print时调用该方法'
obj = Animal()
print(obj)
format_dict={
'nat':'{obj.name}-{obj.addr}-{obj.type}',#学校名-学校地址-学校类型
'tna':'{obj.type}:{obj.name}:{obj.addr}',#学校类型:学校名:学校地址
'tan':'{obj.type}/{obj.addr}/{obj.name}',#学校类型/学校地址/学校名
}
class School:
def __init__(self,name,addr,type):
self.name=name
self.addr=addr
self.type=type
def __repr__(self):
return 'School(%s,%s)' %(self.name,self.addr)
def __str__(self):
return '(%s,%s)' %(self.name,self.addr)
def __format__(self, format_spec):
# if format_spec
if not format_spec or format_spec not in format_dict:
format_spec='nat'
fmt=format_dict[format_spec]
return fmt.format(obj=self)
s1=School('Hogwarts','FL','magic')
print('from repr: ',repr(s1))
print('from str: ',str(s1))
print(s1)
print(format(s1,'nat'))
print(format(s1,'tna'))
print(format(s1,'tan'))
print(format(s1,'asfdasdffd'))
__str__、__repr__和__format__的更多相关文章
- Python——详解__str__, __repr__和__format__
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第10篇文章,我们来聊聊Python当中的类. 打印实例 我们先从类和对象当中最简单的打印输出开始讲起,打印一个实例 ...
- python基础---- __getattribute__----__str__,__repr__,__format__----__doc__----__module__和__class__
目录: 一. __getattribute__ 二.__str__,__repr__,__format__ 三.__doc__ 四.__module__和__class__ 一. __getattri ...
- __str__,__repr__,__format__
__str__,__repr__ __str__:控制返回值,并且返回值必须是str类型,否则报错 __repr__:控制返回值并且返回值必须是str类型,否则报错 __repr__是__str__的 ...
- python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法
一:string相关:__str__(),__repr__(),__format__() str方法更面向人类阅读,print()使用的就是str repr方法更面对python,目标是希望生成一个放 ...
- 反射,内置方法,__str__ __repr__
反射 反射用到的mmp模块 def wahaha():print('wahaha') class QQxing: def __init__(self,name): self.name = name d ...
- day29 类中的内置函数方法 __str__ __repr__ __call__ isinstance() issubclass()
__str__()__repr__()__len__() str() 转字符串repr() 让字符原形毕露的方法len() 计算长度 内置的方法很多,但是并不是全部都在object中,比如len(), ...
- python 中的 %s,%r,__str__,__repr__
1.%s,%r的区别 在进行格式化输出时,%r 与 %s 的区别就好比 repr() 函数处理对象与 str() 函数处理对象的差别. %s ⇒ str(),比较智能: %r ⇒ repr(),处理较 ...
- __str__&__repr__
[__str__&__repr__] object.__str__(self): Called by the str() built-in function and by the print ...
- Python的程序结构[1] -> 方法/Method[4] -> 魔术方法 __call__ / __str__ / __repr__
__call__ 方法 __call__ 是当对象被调用时会调用的方法,允许一个对象(类的实例等)像函数一样被调用,也可以传入参数. 1 class Foo(): 2 def __init__(sel ...
- __str__,__repr__,__add__
class School: def __init__(self,name,addr,type): self.name=name self.addr=addr self.type=type def __ ...
随机推荐
- ArcGIS 如何设置地图显示范围大小
说来惭愧,学ArcGIS也已经有两年了.今天才知道原来ArcGIS是可以设置地图显示范围大小的 打开ArcMap,选择左边图例的图层(Layers) ,右键点击,选择属性(Properties..), ...
- jmeter响应代码为乱码
1.在请求的前面添加BeanShell PostProcessor 输入prev.setDataEncoding("UTF-8"); 2.当响应数据或响应页面没有设置编码时,jme ...
- oracle函数 to_single_byte(c1)
[功能]将字符串中的全角转化为半角 [参数]c1,字符型 [返回]字符串 [示例] SQL> select to_multi_byte('高A') text from dual; test -- ...
- em&rem
PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位: 3. Firefox能够调整px和em,rem px像素(Pi ...
- jquery实用应用之jquery操作radio、checkbox、select
本文收集一些jquery的实用技巧,非常实用的哦,其中对radio.checkbox.select选中与取值的方法. 获取一组radio被选中项的值var item = $('input[@name= ...
- jq css()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python--day65--模板语言之filter
参考的原文链接:http://www.cnblogs.com/liwenzhou/p/7931828.html Filters(过滤器) 在Django的模板语言中,通过使用 过滤器 来改变变量的显示 ...
- Python--day40--datetime,socketserver,Threading模块分别是哪些模块的高层模块
- UVA 247"Calling Circles"(floyd求传递闭包+SCC)
传送门 题意: 如果两个人相互打电话(直接或间接),则说他们在同一个电话圈里. (a,b) 表示 a 打给 b: 例如,(a,b),(b,c),(c,d),(d,a),则这四个人在同一个电话圈里: 输 ...
- win10 uwp 解决 SerialDevice.FromIdAsync 返回空
调用 SerialDevice.FromIdAsync 可能返回空,因为没有设置 package.appmanifest 可以使用端口 打开 package.appmanifest 文件添加下面代码 ...