首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python笔记70 - Python__repr__和__str__区别

前言 Python__repr__和__str__使用区别 __repr__ 使用 很多时候我们在创建一个类的时候,在终端打印类的实例,看到的是一个类似于这样的内容: class MyDefined(object): def __init__(self): self.name = "yoyo" 在终端调试结果 >python Python...self): return ''.format(self.name) 重新在终端调试 >python Python 3.6.6 >>> from...(x)转换对象x时 在上述三种场景,会优先调用对象的__str__()方法;若没有,就调用__repr__()方法;若再没有,则显示其内存地址。...当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。

37140
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python函数 __str__ 和 __repr__ 的区别

    简而言之: __str__ 的目标在于可读性(对用户更友好) __repr__ 的目标在于无歧义(更有助于调试) 举个栗子(Difference between str and repr?)...repr(today) 'datetime.datetime(2020, 3, 28, 11, 6, 49, 580643)' 注:str()和repr()函数分别调用的是 __str__ 和 __repr...__ 从上面不难看出, __str__ 强调对于用户的可读性,而 __repr__则倾向于描述对象本身。...另外在《流畅的Python》一书中提到如果这两个方法只实现一个的话,那么 __repr__ 会是更好的选择。因为如果一个对象没有 __str__ 函数,解释器会用 __repr__代替,反之则不成立。...: class Sic(object): def __repr__(object): return 'foo' print str(Sic()) print repr(Sic()) class

    28330

    Python__str__() 和 __repr__() 的用法

    在这种情况下使用的是缺省的 __str__() 和 __repr__() 。 类包含 __str__() 下面在类添加 __str__() 方法。 >>> class Dog: ......类包含 __str__() 和 __repr__() 接下来我们继续添加 __repr__() 方法。 >>> class Dog: ......这表明,当类只包含 __repr__() 方法时,不管是直接输出还是调用 print() 函数进行输出,都会调用类的 __repr__() 方法。...总结 当自定义类没有定义 __str__() 和 __repr__() 时,在进行对象的输出时,会调用默认的 __str__() 和 __repr__() ;当类只包含 __str__() 时,调用...,会调用 __str__(),直接输出会调用 __repr__();当类只包含 __repr__() 时,调用 print() 函数进行对象的输出和直接输出都会调用 __repr__()。

    54730

    Python Every Class Needs a __repr__

    一、思考 当我们在Python定义一个类的时候,如果我们通过print打印这个类的实例化对象,或者我们直接输入这个类实例化对象会返回怎么样的结果,如下代码: >>> class People(object...>>> tom >>> 默认情况下,你得到的是一个字符串,其中包含类名和对象实例的id(这是CPython对象的内存地址...__ 在上面的代码我们添加了str_方法之后,当我们将对象转换为字符串的时候都会调用str方法,并得到我们自己定义的内容,但是并没有影响到我们在python交互模式下直接输入对象的返回内容。...def __repr__(self): ......等容器存储对象的时候,我们打印看到的都是repr的内容,我们把上面的tom存到列表里, 然后打印查看如下: >>> print([tom]) [__repr__: people name is Tom

    36520

    Python面向对象编程-魔术方法-__str__和__repr__方法

    Python面向对象编程,魔术方法是一组特殊的方法,用于在特定情况下调用对象的操作。其中,__str__和__repr__方法是最常用的魔术方法之一。...__repr__方法返回一个字符串,该字符串是用于在Python解释器重新创建该对象的字符串表示形式。通常情况下,该字符串应该是一个Python表达式,可以直接传递给Python解释器。...接着,我们实现了__str__和__repr__方法。在__str__方法,我们返回了一个字符串,描述了该对象的可读性更好的表示形式。...而在__repr__方法,我们返回了一个字符串,用于在Python解释器重新创建该对象。...需要注意的是,__repr__方法返回的字符串必须是一个有效的Python表达式,可以直接传递给Python解释器。

    24030

    python 魔术方法(三)对象的打印 -- __repr__ 与 __str__

    引言 上一篇文章,我们介绍了 Python 的对象创建和初始化的两个方法。...python 魔术方法(二) 对象的创建与单例模式的实现 但有另外两个常用的魔术方法也一样困扰着很多 Python 程序员,那就是本文将介绍的用于对象字符串化的两个方法 — __repr__ 和 __str...__ 你一定会疑惑,为什么 Python 与其他很多编程语言有如此不同 — 对象的字符串输出方法为什么会有两个?...结论 我们看到,默认的方式通常并不是我们想要的,而如果我们只实现了 __repr__,那么所有需要使用 __str__ 的场景都会去调用 __repr__ 因此,实践的建议是,为每个类都实现 __repr...例如下面定义的 IP 类,__repr__ 方法用于在 log 等场景打印类内成员的详情,而 __str__ 则用于将 IP 值转化为点分十进制方式用于友好的输出。

    43020

    如何在 Python 中将对象打印为字符串?

    Python 编程,有时我们需要将对象转换为字符串格式,以便于打印输出、日志记录或数据存储等操作。Python 提供了多种方法来将对象转换为字符串。...如果没有在类定义 __str__() 方法,str() 函数将调用对象的 __repr__() 方法来获取字符串表示形式。...方法二:使用 repr() 函数Python 内置的 repr() 函数可以将对象转换为可打印的字符串格式。这个函数会调用对象的 __repr__() 方法来获取对象的字符串表示形式。...我们在类定义了 __repr__() 方法,该方法返回一个字符串,表示该对象的信息。...如果没有在类定义 __repr__() 方法,repr() 函数将调用对象的 __str__() 方法来获取字符串表示形式。

    1.5K30

    讲解pytorch报错Unable to get repr for

    torch.Tensor([1, 2, 3]) return CustomClass(data)# 测试代码output = custom_function()print(output)在这个示例,...我们定义了一个名为 CustomClass 的自定义类,它接受一个数据参数,并在 __repr__ 方法返回一个可读的字符串表示。...这个示例代码展示了一个实际场景遇到报错的情况,并通过定义正确的 __repr__ 方法解决了这个问题。PyTorch是一个广泛使用的深度学习框架,它依赖于多个支持库和软件包来提供各种功能。...下面是PyTorch的一些常见依赖项的详细介绍:Python: PyTorch是一个Python库,因此它的主要依赖项之一是Python本身。PyTorch支持Python 3.6或更高版本。...Cython: Cython是一个将Python代码编译为C语言扩展模块的工具。PyTorch的某些部分使用了Cython来提高性能和效率。

    55610

    不知道鸭子类型就当没学过python

    python万物皆对象实现机制 python如何实现自定义序列类型 python元类编程 ✨ 回顾一下之前讲到的python的万物皆对象的实现机制 在python,函数和类也是对象,属于python...魔法函数好处多多 魔法函数是python的特殊方法,那你可以理解为,这些特殊方法是一些定义好的回调行为, 所以魔法函数不能自定义,定义之后不需要调用,若你将这些行为用到自己的类,那么当触发这个回调后就会调用这个方法...所有的魔法函数如下: __repr__:用于自定义输出实例化对象信息 •默认情况下(也即用户不显式写出__repr__方法时)会得到“类名+object at+内存地址”这样格式的信息•当显示写出__repr...,打印对象时就会从调用这个方法并 打印出return的字符串数据•__str__面向用户 •__repr__适用于所有环境,__str__只是覆盖了__repr__以得到更友好的用户显示 栗子: class...(a) 输出: test __len__:在Python,我们经常会使用len()函数获取一个对象的长度,实际上在其内部会自动调用该对象的__len__()方法 tips: python内置类型

    53820

    Python——花式打印对象的若干种方法

    的特殊函数,在我们创建类的时候,系统会我们隐式创造许多这样的特殊函数。...__repr__方法 你也许可能也听说过__repr__函数,它也可以实现根据我们的需要自定义输出的功能。比如我们把上面的代码改下函数名,也可以得到一样的结果。...所以当我们print输出给用户或者使用str函数进行类型转化的时候,Python都会默认优先调用__str__函数。...这两个函数如果我们只实现了一个,Python在调用的过程当中,都会执行那个被我们实现的。但是这两者本身的应用场景是有区别的,只是Python为了我们方便做了适配。...对于Python这门语言来说,我个人感觉实现功能只是其中很小的一个部分,把代码写得简洁美观,才是其中的大头。这也是为什么很多人都说Python易学难精的原因。

    5.4K20

    Python 的魔法函数

    魔法函数是Python的特性,学习好魔法函数将有助于我们写出优秀的pythonic(优雅的、地道的、整洁的)代码,同时因为Python语言的特性,我们在进行框架设计的时候除了设计模式等高级技能,魔法函数是必须使用的...如果我们在一个类同时定义了__str__和__repr__函数,print和str函数会调用__str__,但是如果对象在列表内,打印时始终会调用__repr__,如果只定义了__repr__,那么print...、str都会调用__repr__,所以强烈建议在写类的时候,如果需要格式化输出,那么一定要定义一个__repr__函数。...,字典的键必须是一个可哈希的对象,因为Python的字典背后的实现是采用的哈希表,但是list对象是不能哈希的,自然就报错了,下面我们做一下修改: 奇迹的发现,list可以作为键了,因为我们重载了list...,实现了哈希函数,这样就满足了字典的要求 还有一些其他的魔法函数,我们下次再总结,Python的魔法函数非常多,我们不需要全部记下,大概有个印象就可以了。

    84050
    领券