• 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__的更多相关文章

  1. Python——详解__str__, __repr__和__format__

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第10篇文章,我们来聊聊Python当中的类. 打印实例 我们先从类和对象当中最简单的打印输出开始讲起,打印一个实例 ...

  2. python基础---- __getattribute__----__str__,__repr__,__format__----__doc__----__module__和__class__

    目录: 一. __getattribute__ 二.__str__,__repr__,__format__ 三.__doc__ 四.__module__和__class__ 一. __getattri ...

  3. __str__,__repr__,__format__

    __str__,__repr__ __str__:控制返回值,并且返回值必须是str类型,否则报错 __repr__:控制返回值并且返回值必须是str类型,否则报错 __repr__是__str__的 ...

  4. python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法

    一:string相关:__str__(),__repr__(),__format__() str方法更面向人类阅读,print()使用的就是str repr方法更面对python,目标是希望生成一个放 ...

  5. 反射,内置方法,__str__ __repr__

    反射 反射用到的mmp模块 def wahaha():print('wahaha') class QQxing: def __init__(self,name): self.name = name d ...

  6. day29 类中的内置函数方法 __str__ __repr__ __call__ isinstance() issubclass()

    __str__()__repr__()__len__() str() 转字符串repr() 让字符原形毕露的方法len() 计算长度 内置的方法很多,但是并不是全部都在object中,比如len(), ...

  7. python 中的 %s,%r,__str__,__repr__

    1.%s,%r的区别 在进行格式化输出时,%r 与 %s 的区别就好比 repr() 函数处理对象与 str() 函数处理对象的差别. %s ⇒ str(),比较智能: %r ⇒ repr(),处理较 ...

  8. __str__&__repr__

    [__str__&__repr__] object.__str__(self): Called by the str() built-in function and by the print  ...

  9. Python的程序结构[1] -> 方法/Method[4] -> 魔术方法 __call__ / __str__ / __repr__

    __call__ 方法 __call__ 是当对象被调用时会调用的方法,允许一个对象(类的实例等)像函数一样被调用,也可以传入参数. 1 class Foo(): 2 def __init__(sel ...

  10. __str__,__repr__,__add__

    class School: def __init__(self,name,addr,type): self.name=name self.addr=addr self.type=type def __ ...

随机推荐

  1. C++第一次作业(循环语句的使用)

    一.知识点 循环结构 二.教学目的 掌握while和do...while循环语句在C++中的写法 三.教学内容 1.while语句 (1)执行顺序:先判断表达式(循环控制条件)的值,若表达式的值为tr ...

  2. python 浮点型(float)

  3. Laravel 的HTTP控制器

    简介# 除了在路有文件中以闭包的形式定义所有的请求处理逻辑外,还可以使用控制器类来组织此类行为,控制器能够将相关 的请求处理逻辑组成的一个单独的类,控制器被存放在app/Http/Controller ...

  4. 一条数据的漫游 -- X-Engine SIGMOD Paper Introduction

    大多数人追寻永恒的家园(归宿),少数人追寻永恒的航向. ----瓦尔特.本雅明 背景 X-Engine是阿里数据库产品事业部自研的OLTP数据库存储引擎,作为自研数据库POLARDB X的存储引擎,已 ...

  5. day3_python之函数参数

    一.形参 在定义函数时,括号内的参数称为形参,特点:形参就是变量名 def foo(x, y): # x=1,y=2 print(x) print(y) 二.实参 在调用函数时,括号内的参数成为实参, ...

  6. H3C 命令行帮助特性(续)

  7. oracle等式比较和范围比较

    当WHERE子句中有索引列, ORACLE不能合并它们,ORACLE将用范围比较. 举例: DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引. SELECT ENAME FROM ...

  8. python不得不知的几个开源项目

    1.Trac Trac拥有强大的bug管理 功能,并集成了Wiki 用于文档管理.它还支持代码管理工具Subversion ,这样可以在 bug管理和Wiki中方便地参考程序源代码. Trac有着比较 ...

  9. Python--day48--ORM框架SQLAlchemy之子查询

    一定要把第一次查询的结果作为一个结果再进行查询:代码后面加.subquery()标明是子查询 1,简单的子查询 #select * from (select * from tb) as B q1 = ...

  10. java 集合之Arraylist的遍历及排序

    最近培训是先学习java基础 从最基本的开始学起 因为今天刚刚开博客 要把上周的一些重点内容归纳一下 1.Arraylist常用遍历以及排序 import java.util.ArrayList; i ...