str__和__repr

__str__和__repr__都是python的内置方法,都用与将对象的属性转化成人类容易识别的信息,他们有什么区别呢

来看一段代码

from math import hypot

class Vector:
def __init__(self, x, y):
self.x = x
self.y = y def __str__(self):
return 'Vector(%r,%r)' % (self.x, self.y) def __abs__(self):
return hypot(self.x, self.y) def __bool__(self):
return bool(abs(self)) def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x,y) def __mul__(self, scalar):
"""相乘时调用__mul__方法"""
return Vector(self.x * scalar, self.y * scalar)

在控制台进行如下输入
```python
from cheapter_1.vector import Vector
v1=Vector(3,4)
v1

print(v1)
Vector(3,4)


<br>
把__str__换成__repr__
```python
def __repr__(self):
return 'Vector(%r,%r)' % (self.x, self.y)

在控制台重复上述操作
```python
from cheapter_1.vector import Vector
v1 = Vector(3,4)
v1
Vector(3,4)
print(v1)
Vector(3,4)
```


同时定义__str__和__repr__

    def __str__(self):
return "in __str__" def __repr__(self):
return 'Vector(%r,%r)' % (self.x, self.y)

在控制台进行以下操作
```python
from cheapter_1.vector import Vector
v1=Vector(3,4)
v1
Vector(3,4)
print(v1)
in __str__


<br>
## 小结
__str__和__repr__的区别主要有以下几点
- __str__是面向用户的,而__repr__面向程序员去找
- <b><font color='red'>打印操作会首先尝试__str__和str内置函数(print运行的内部等价形式),如果没有就尝试__repr__,都没有会输出原始对象形式</font></b>
- <b><font color='red'>交互环境输出对象时会调用__repr__</font></b> <br>
更多关于__str__与__repr__的区别:<a href='https://stackoverflow.com/questions/1436703/difference-between-str-and-repr'>Difference between __str__ and __repr__?</a> 本文部分代码来源:fluent python by Luciano Ramalho(O'Reilly).Copyright 2015 Luciano Ramalho,978-1-491-94600-8

python中__str__与__repr__的区别的更多相关文章

  1. Python中__str__和__repr__的区别

    Python有一个内置的函数叫repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是“字符串表示形式”.repr就是通过__repr__这个特殊方法来得到一个对象的字符串表示形式.如果没有实现 ...

  2. 浅谈python中__str__和__repr__的区别

    很多时候我们在创建一个类的时候,在终端打印类或者查看的时候一般都不会得到一个太满意的结果 class T: def __init__(self): self.color="red" ...

  3. python中__str__与__repr__

    (1)背景 python中,对于类(自定义类)的实例对象的默认显示既没有太大用处,也不美观.比如: class adder: def __init__(self,value=0): self.data ...

  4. Python中type与Object的区别

    Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: clas ...

  5. Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif

    Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif 一丶__str__ 和 __repr__ ...

  6. [Python3 填坑] 015 __str__ 与 __repr__ 的区别

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 上例子 2.2 关系与区别 Python 3.7.3 的官方文档 网上看到一个例子,运行了一下 简单地说 1. print( 坑的信息 ...

  7. Python中生成器和迭代器的区别(代码在Python3.5下测试):

    https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...

  8. Python中的is和==的区别,==判断值是否相等,is判断地址是否一致

    Python中的is和==的区别 Python中的对象包含三要素:id.type.value. 其中id用来唯一标示一个对象,type标识对象的类型,value是对象的值. is判断的是a对象是否就是 ...

  9. 基于python中staticmethod和classmethod的区别(详解)

    例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object):   def foo(self,x):     print "executing foo ...

随机推荐

  1. UDK Stat命令

    Stat命令(chs  en)提供了游戏和引擎各个方面的实时统计信息,输入不同参数会在屏幕HUD上显示对应统计数据. 非Shipping版的UDK才会启用STATS宏,统计逻辑才会编译进exe,才能使 ...

  2. SQL Server数据库————增删改查

    --增删改查--增 insert into 表名(列名) value(值列表) --删 delect from 表名 where 条件 --改 update 表名 set 列名=值1,列名2=值2 w ...

  3. 关于使用nodejs的mysql查询时碰到的坑

    今天在编写登录模块时,碰到一个隐蔽的坑,故记录一番 在使用Node.js的mysql模块的query方法时,查询语句使用了 `select password from login where name ...

  4. MySQL数据库聚合函数

    +++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库聚合函数时间:2019年2月25日内容:MySQL数据库聚合函数重点:MySQL数据库聚合函 ...

  5. Bool的转录功能

    Bool的转录功能 and 当and前边的条件成立时,才执行后边的条件.当前边的条件不成立时,后边的条件一定执行. 特性实用: 不使用if.while写一个具有判断功能的代码. def fun(): ...

  6. 软工+C(4): Alpha/Beta换人

    // 上一篇:超链接 // 下一篇:工具和结构化 注:在一次软件工程讨论课程进度设计的过程中,出现了这个关于 Alpha/Beta换人机制的讨论,这个机制在不同学校有不同的实施,本篇积累各方观点,持续 ...

  7. spring整合redis使用RedisTemplate的坑Could not get a resource from the pool

    一.背景 项目中使用spring框架整合redis,使用框架封装的RedisTemplate来实现数据的增删改查,项目上线后,我发现运行一段时间后,会出现异常Could not get a resou ...

  8. 记录BigInteger犯过的一个错误

    2019年4月18号,面试遇到的面试题,当时做错了,纪念下. public class StrTest { public static void main(String[] args) { BigIn ...

  9. python模拟登陆Github示例

    首先进入github登录页:https://github.com/login 输入账号密码,打开开发者工具,在Network页勾选上Preserve Log(显示持续日志),点击登录,查看Sessio ...

  10. 通过VuePress管理项目文档(二)

    通过vue组件实现跟:Element相似的效果.需要在VuePress网站中将自己的项目中的Vue组件运行结果展示在页面中. 至于如何将组件在VuePress网站中展示请参考:https://segm ...