简而言之: __str__ 的目标在于可读性(对用户更友好) __repr__ 的目标在于无歧义(更有助于调试) 举个栗子(Difference between str and repr?)...2020-03-28 11:06:49.580643' >>> repr(today) 'datetime.datetime(2020, 3, 28, 11, 6, 49, 580643)' 注:str()和repr...()函数分别调用的是 __str__ 和 __repr__ 从上面不难看出, __str__ 强调对于用户的可读性,而 __repr__则倾向于描述对象本身。...另外在《流畅的Python》一书中提到如果这两个方法只实现一个的话,那么 __repr__ 会是更好的选择。因为如果一个对象没有 __str__ 函数,解释器会用 __repr__代替,反之则不成立。...Sic(object): def __str__(object): return 'foo' print str(Sic()) print repr(Sic()) 输出: foo foo
标准库的类 我们先通过 date 模块里的 today 类来直观认识下 __str__() 和 __repr__() 。...在这种情况下使用的是缺省的 __str__() 和 __repr__() 。 类中包含 __str__() 下面在类中添加 __str__() 方法。 >>> class Dog: ......类中包含 __str__() 和 __repr__() 接下来我们继续添加 __repr__() 方法。 >>> class Dog: ......区别 __str__() 用于为最终用户创建输出,而 __repr__() 主要用于调试和开发。 建议 为任何自定义的类添加 __repr__() 方法。...总结 当自定义类中没有定义 __str__() 和 __repr__() 时,在进行对象的输出时,会调用默认的 __str__() 和 __repr__() ;当类中只包含 __str__() 时,调用
在stackoverflow有一个很精辟的回答解释这两个内置方法的区别,简单来说,__str__方法是表现给使用者使用的,而__repr__方法是给程序员用的。...return '__str__' def __repr__(self): return '__repr__' my_book=book() print(my_book) __...str__ my_book Out[13]: __repr__ 我们可以简单的看出print方法调用的是__str__,因为这是展现给使用者的,而直接在python的解释器,返回的是__repr__方法...) str(today) Out[16]: '2018-02-15' repr(today) Out[17]: 'datetime.date(2018, 2, 15)' 管中窥豹,str(today)返回的是...2018-02-15,我们可以看出来具体的时间,而repr(today)返回的是datetime.date这个方法,显然我们可以直接使用这个方法实例化。
前言 在Pyhton 中,如果想定制化打印出实例对象的信息,那可以使用__str__和__repr__魔法方法来定制化显示。...__str__和__repr__ 在Python中,打印一个自定义类的实例对象所显示的信息往往是很不友好的,如下所示: >>> class Animal(): ......__和__repr__ 所起的作用就是定制化显示输出信息(你想输出什么就是什么),当然,两者也有区别的,区别如下: •对于print和str内置函数,程序会首先尝试__str__,如果没有__str__...•在交互式回应,repr函数中__repr__会被调用,你可以这么认为,__str__ 是给用户看的,__repr__则是给开发者看的....str函数中调用的是 __str__, 而在交互式响应中 和 repr函数中调用的是__repr__。
前言 Python中__repr__和__str__使用区别 __repr__ 使用 很多时候我们在创建一个类的时候,在终端打印类的实例,看到的是一个类似于这样的内容:<XXX object at 0x0000000001222E10...__str__ 使用 __str__方法是在print()打印的时候输出给用户看的,面向的是普通的用户,方便用户知道返回的是什么实例对象。...object at 0x000,只有print()输出的时候才会打印__str__返回的内容 总结 注意:__str__()方法和__repr__()方法的返回值只能是字符串!...__repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向开发者 关于调用两种方法的时机 使用print()时 使用%s和f’{}’拼接对象时 使用str...当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。
在交互环境下输入对象和直接通过repr这个内置函数处理对象的时候,它只会触发repr方法,如果repr方法不存在,会找父类的repr方法,不会去找str方法。 repr方法是str方法的备胎。...一、__str__方法 通过print打印的时候,str被触发了。通过str函数调用的时候,str也被触发了。 用内置函数format把这个对象传进去。它也能触发。...print("---str--触发了--") return self.name def __repr__(self): print("__repr__被触发")...报错了,提示repr返回的不是个字符串,是个None。必须返回字符串。...myClass.object-{}'.format(self.name) m=MyClass("清菡") print(m) # str(m) # format(m) res=repr(m) print(res) str和repr
Type "a" or "b": a got input: None 我不明白为什么 get_input() 函数返回的是 None,因为它本应只返回 my_var。这个 None 是从哪里来的?...答: 它返回 None 是因为当你递归调用它时: if my_var != "a" and my_var !...没有返回那个值。 因此,尽管递归确实发生了,但返回值却被丢弃了,然后你会从函数末尾退出。...在函数末尾退出意味着 Python 会隐式地返回 None,就像下面这样: >>> def f(x): ......Python3 documentation 因此,除了在 if 语句中调用 get_input() 之外,还需要返回递归调用返回的内容。
__repr__ 接下来我们看一看__str__和__repr__有哪些异同。...根据Python官方文档定义: __str__:通过str(object)以及内置函数format()和print()调用以生成一个对象的“非正式”或格式良好的字符串表示。返回值必须是字符串对象。...__repr__:是由repr()内置函数调用,用来输出一个对象的“官方”字符串表示。返回值必须是字符串对象,此方法通常被用于调试。内置类型 object 所定义的默认实现会调用 object....__ 的目标是可读的,__str__()并不预期返回一个有效的 Python 表达式,但可以使用更方便或更准确的描述信息。...容器的 __str__ 方法的使用包含对象的 __repr__ 参考资料: “Difference between __str__ and __repr__ in Python” Fluent Python
其中,__str__和__repr__方法是最常用的魔术方法之一。这两个方法都是用于打印对象时的字符串表示形式,但它们的作用略有不同。...下面是一个简单的例子,演示了如何使用__str__和__repr__方法:class MyClass: def __init__(self, name, age): self.name...接着,我们实现了__str__和__repr__方法。在__str__方法中,我们返回了一个字符串,描述了该对象的可读性更好的表示形式。...而在__repr__方法中,我们返回了一个字符串,用于在Python解释器中重新创建该对象。...需要注意的是,__repr__方法返回的字符串必须是一个有效的Python表达式,可以直接传递给Python解释器。
# 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了 __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的...打印操作会首先尝试__str__和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。...__repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用__str__,会使用print和str。...它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。...当我们想所有环境下都统一显示的话,可以重构__repr__方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str
return 语句,但是在函数调用后,都能取到一个返回值。...它们的执行效果跟直接写 return 语句相比,是完全相同的: 这 4 个例子属于两种类型:一种没有写 return,但是都有隐藏的 return 返回值;一种写了 return,而且实际也有返回值。...不管有没有写 return,它们都会执行 return 的逻辑,而且默认的返回值就是 None。 那么,问题来了:Python 的函数为什么能默认返回 None 呢?它是如何实现的呢?...答案就在解释器中,当 CPython 解释器执行到函数的最后一个代码块时,若发现没有返回值,它就会主动地加上一个 Py_None 值返回(出自:compile.c): 也就是说,如果定义的函数没有返回值...那么,这就会引出新的问题:Python 为什么要求函数都要有返回值呢?为什么它不像某些语言那样,提供一个 void 关键字,支持定义无返回值的空函数呢?
一、函数 None 返回值 1、空返回值 在 Python 函数中 , return 返回值是可选的 , 函数可以没有返回值 ; def 函数名(函数参数): """函数文档字符串(可选)"""...- 接收 None 返回值 下面的代码中 , hello 函数没有使用 return 关键字 返回 返回值 ; 该 hello 函数 没有显示定义 返回值 , 实际上该函数返回的是 None 返回值...; 使用变量接收该函数的返回值 , 返回值是 None , 返回值类型是 NoneType ; 代码示例 : """ 接收 函数 None 返回值示例 """ # 定义无返回值的函数 def hello...return 关键字返回 None 在该示例中 , 比上一个示例多了 return None 返回值 , 其执行效果与没有返回值一模一样 ; 代码示例 : """ 接收 函数 None 返回值示例 ""...None 二、None 值应用场景 ---- 1、None 值应用场景简介 函数 None 返回值应用场景 : 函数返回值 : 表示函数没有返回值 ; 用于 if
但递归函数的返回值有时会出现意想不到的情况。 下面来举一个例子: >>> def fun(i): ... i += 1 ... if i < 5: ... ...return i ... >>> r = fun(0) >>> print(r) 比如上面这段代码,乍一看没什么问题,但返回值并不是我们期望的 5,而是 None。...>>> print(r) None 要解决这个问题也简单,就是在执行递归调用的时候,加上 return 语句。 修改之后的代码如下: >>> def fun(i): ... ...本文就到这里了,如果觉得有用的话欢迎点赞,转发和关注,谢谢。
今天给大家分享小编遇到的一个坑有关python递归调用中的坑:打印有值, 返回却None问题。...输出结果让我百思不得其解, 为什么明明上一步输出有值, return出去后就变成了None??...return right_shift(s, n) s = right_shift(s1, 4) print(s) # 成功输出 "efgabcd" 知识点补充:python 递归返回None 解决 今天写了一个递归...return 之前答应出来都是有值的, 调用时候返回值都是None ,很是纳闷 后来找到原因 现在来看下返回None 的代码 def get_end_parent_ele(self, obj):...None 总结 到此这篇关于python递归调用中的坑:打印有值, 返回却None的文章就介绍到这了,更多相关python递归打印有值返回none内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持
目录 一、单例模式实现的思路 1.实现的思路 2.代码 3.通过单例模式可以做到什么 二、__str__方法和__repr__方法 三、__str__方法 一、单例模式实现的思路 1.实现的思路 图片来自网络...创建过了,就把它对应的值改掉,下次再进来判断的时候,这个条件就不会成立了。 下次就不创建了,就把第一次创建的对象返回出去。第一次创建的对象,找个变量给它接收一下就行了。...二、__str__方法和__repr__方法 交互环境下print打印的内容和直接输入变量,返回的内容不一样。 为什么呢? 图片来自网络 __str__方法和__repr__方法这两个方法。...三、__str__方法 「注意:」 重写__str__方法和__repr__方法的时候,必须一定要写return。...重写__str__方法和__repr__方法的时候,return返回的必须是一个字符串对象。 1.函数没有return,不写return,默认返回的是个None。
__str__和__repr__ 改变对象的字符串显示__str__, __repr__ 示例 class List: def __init__(self, *args): self.l...(b) # 相当于 str(b)的返回值 print(repr(a)) # 函数 打印repr的返回值 print(repr(b)) # 函数 打印repr的返回值 print(a.... i in self.l])) l = List(1,2,3,4,5) #注释掉上面的__str__方法,和__repr__方法 print(str(l)) print(repr(l)) 执行结果...__str__和__repr__加上__format__的例子 改变对象的字符串显示__str__, __repr__,自定制格式化字符串__format__ format_dict = { '...__repr__() 如果__str__没有被定义,那么就会使用__repr__来代替输出 注意:这两方法的返回值必须是字符串,否则抛出异常 """ print('from repr:', repr(s1
__,则__repr__负责print(obj)和交互式命令行中输出obj的信息 # 如果重写了__str__,则__repr__只负责交互式命令行中输出obj的信息 def __repr__(self...如果属性存在,则返回该属性的值,如果属性不存在,则返回None。 注意,我们在使用hasattr(obj,属性名)来判断某个属性是否存在时,__getattribute__方法也会被调用。...返回结果: __getattribute__ in Foo Alex __getattribute__ in Foo age不存在,但我可以返回一个值 54 我们看到,f.name和f.age都调用了_...__str__和__repr__ __str__用于定义print(obj)时打印的内容。...当我们同时重写__str__和__repr__时: class Foo(): ... def __str__(self): ... return "我是Foo---str" ...
python 魔术方法(二) 对象的创建与单例模式的实现 但有另外两个常用的魔术方法也一样困扰着很多 Python 程序员,那就是本文将介绍的用于对象字符串化的两个方法 — __repr__ 和 __str...__ 你一定会疑惑,为什么 Python 与其他很多编程语言有如此不同 — 对象的字符串输出方法为什么会有两个?...logging 打印日志的目的一致,此时调用的是 __str__ 方法 容器的 __str__ 方法调用的是每一个成员的 __repr__ 方法 3....例如下面定义的 IP 类,__repr__ 方法用于在 log 等场景中打印类内成员的详情,而 __str__ 则用于将 IP 值转化为点分十进制方式用于友好的输出。...__ 方法,这种问题是需要格外注意和避免的。
)item参数 __repr__、__str__、__abs__、__add__、__mul__、__bool__ from math import hypot class Vector:..."Vector(%r,%r)" % (self.x,self.y) def __str__(self): # 如果类中同时有__str__和__repr__,则调用print是会先使用__...(9,12) print(v + v2) #返回Vector(4,6) __repr__和__str__的区别在于,后者是在str()函数中被使用,或是在用print打印函数打印一个对象的时候才被调用...如果你只想实现这两个特殊方法中的一个,__repr__是更好的选择,因为如果一个对象没有__str__函数,而python又需要调用它的时候,解释器会用__repr__作为代替。...因此在使用print()函数时,解释器会按照__str__,__repr__的顺序寻找。
是这个方法的返回值 2.这个方法不能有参数了 3.类不能调用,只能对象调用 class Person: def __init__(self,name,height,weight):...>>> s 因为直接显示变量调用的不是__str__(),而是__repr__(),两者的区别是__str__()返回用户看到的字符串...,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。...但是通常__str__()和__repr__()代码都是一样的,所以,有个偷懒的写法: class Student(object): def __init__(self, name):...__repr__() 如果__str__没有被定义,那么就会使用__repr__来代替输出 注意:这俩方法的返回值必须是字符串,否则抛出异常 3、__getattr__ 调用不存在的属性时,比如score
领取专属 10元无门槛券
手把手带您无忧上云