self,name,age): self.name = name self.age = ageperson = Person('吕星辰',20)print(person) # 内存中的一个对象...输出实例化的Person类,返回的是一个在内存中的对象,事实上,当输出person实例对象时,实际上输出的是person对象上...__repr__) # __repr__是Python类中的一个特殊方法,由object...但是由于object提供的这个__repr__方法总是返回一个对象, ( 类名 + obejct at + 内存地址 ),这个值并不能真正实现自我描述的功能。...因此,如果你想在自定义类中实现 “自我描述” 的功能,那么必须重写 __repr__ 方法:class Person(): def __init__(self,name,age):
前言 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__以得到更友好的用户显示。
简而言之: __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
在这种情况下使用的是缺省的 __str__() 和 __repr__() 。 类中包含 __str__() 下面在类中添加 __str__() 方法。 >>> class Dog: ......类中包含 __str__() 和 __repr__() 接下来我们继续添加 __repr__() 方法。 >>> class Dog: ......这表明,当类中只包含 __repr__() 方法时,不管是直接输出还是调用 print() 函数进行输出,都会调用类的 __repr__() 方法。...总结 当自定义类中没有定义 __str__() 和 __repr__() 时,在进行对象的输出时,会调用默认的 __str__() 和 __repr__() ;当类中只包含 __str__() 时,调用...,会调用 __str__(),直接输出会调用 __repr__();当类中只包含 __repr__() 时,调用 print() 函数进行对象的输出和直接输出都会调用 __repr__()。
__call__:实现了__call__的对象是可调用的 __repr__:实现了__repr__的对象可以输出对象的相应属性信息 比如说: class Student: def __init__(...self,id,name): self.id=id self.name=name def __repr__(self): return 'id='+str(self.id)+...判断该对象是否是可调用的: callable(stu) 输出:True 那么,就可以使用如下方式调用该对象: stu() 输出: I can be called my name is 张三 而对于实现了__repr...也就是说__repr__实际上是将对象以字符串的格式进行输出。
在stackoverflow有一个很精辟的回答解释这两个内置方法的区别,简单来说,__str__方法是表现给使用者使用的,而__repr__方法是给程序员用的。...book: def __init__(self): pass def __str__(self): return '__str__' def __repr...__(self): return '__repr__' my_book=book() print(my_book) __str__ my_book Out[13]: __repr__...我们可以简单的看出print方法调用的是__str__,因为这是展现给使用者的,而直接在python的解释器,返回的是__repr__方法。...可能这么说还是有些迷糊,更具体的我们可以从python的标准方法datetime看看,一个标准的python对象该如何使用这个方法。
.__ repr__ str函数或者print函数--->obj.str() repr或者交互式解释器--->obj.repr() str函数或者print函数如果__str__没有被定义,那么就会使用...__repr__来代替输出 str函数或者print函数如果__str__被定义,那么__repr__就不会执行 注意:这俩方法的返回值必须是字符串,否则抛出异常
为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print...实例对象时,输出自定义内容,就可以用 __repr__ 方法了 或者通过 repr() 调用对象也会返回 __repr__ 方法返回的值 是不是似曾相识....没错..和 __str__ 一样的感觉 代码栗子...class A: pass def __repr__(self): a = A() print(a) print(repr(a)) print(str(a)) # 输出结果...object at 0x10e6dbcd0> 默认情况下,__repr...__() 会返回和实例对象 有关的信息 重写 __repr__ 方法 class PoloBlog: def __init__(self):
# 重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了 # 重构__str__ calss TestStr(Test):...# 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了 __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的...,而__repr__面向程序员。...__repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用__str__,会使用print和str。...__只是覆盖了__repr__以得到更友好的用户显示。
一、思考 当我们在Python中定义一个类的时候,如果我们通过print打印这个类的实例化对象,或者我们直接输入这个类实例化对象会返回怎么样的结果,如下代码: >>> class People(object...>>> tom >>> 默认情况下,你得到的是一个字符串,其中包含类名和对象实例的id(这是CPython中对象的内存地址...__ 在上面的代码中我们添加了str_方法之后,当我们将对象转换为字符串的时候都会调用str方法,并得到我们自己定义的内容,但是并没有影响到我们在python交互模式下直接输入对象的返回内容。...def __repr__(self): ......等容器中存储对象的时候,我们打印看到的都是repr的内容,我们把上面的tom存到列表里, 然后打印查看如下: >>> print([tom]) [__repr__: people name is Tom
前言 在Pyhton 中,如果想定制化打印出实例对象的信息,那可以使用__str__和__repr__魔法方法来定制化显示。...__str__和__repr__ 在Python中,打印一个自定义类的实例对象所显示的信息往往是很不友好的,如下所示: >>> class Animal(): ......__,如果没有__repr__,则选用默认显示。...•在交互式回应,repr函数中__repr__会被调用,你可以这么认为,__str__ 是给用户看的,__repr__则是给开发者看的....__str__, 而在交互式响应中 和 repr函数中调用的是__repr__。
在Python面向对象编程中,魔术方法是一组特殊的方法,用于在特定情况下调用对象的操作。其中,__str__和__repr__方法是最常用的魔术方法之一。...__repr__方法返回一个字符串,该字符串是用于在Python解释器中重新创建该对象的字符串表示形式。通常情况下,该字符串应该是一个Python表达式,可以直接传递给Python解释器。...接着,我们实现了__str__和__repr__方法。在__str__方法中,我们返回了一个字符串,描述了该对象的可读性更好的表示形式。...而在__repr__方法中,我们返回了一个字符串,用于在Python解释器中重新创建该对象。...需要注意的是,__repr__方法返回的字符串必须是一个有效的Python表达式,可以直接传递给Python解释器。
引言 上一篇文章中,我们介绍了 Python 的对象创建和初始化的两个方法。...python 魔术方法(二) 对象的创建与单例模式的实现 但有另外两个常用的魔术方法也一样困扰着很多 Python 程序员,那就是本文将介绍的用于对象字符串化的两个方法 — __repr__ 和 __str...__ 你一定会疑惑,为什么 Python 与其他很多编程语言有如此不同 — 对象的字符串输出方法为什么会有两个?...结论 我们看到,默认的方式通常并不是我们想要的,而如果我们只实现了 __repr__,那么所有需要使用 __str__ 的场景都会去调用 __repr__ 因此,实践中的建议是,为每个类都实现 __repr...例如下面定义的 IP 类,__repr__ 方法用于在 log 等场景中打印类内成员的详情,而 __str__ 则用于将 IP 值转化为点分十进制方式用于友好的输出。
字符串的表示形式 我们都知道,Python的内置函数repr()能够把对象用字符串的形式表达出来,方便我们辨认。这就是“字符串表示形式”。...repr()就是通过__repr__这个特殊方法来得到一个对象的字符串表示形式的。...__repr__ 接下来我们看一看__str__和__repr__有哪些异同。...根据Python官方文档定义: __str__:通过str(object)以及内置函数format()和print()调用以生成一个对象的“非正式”或格式良好的字符串表示。返回值必须是字符串对象。...容器的 __str__ 方法的使用包含对象的 __repr__ 参考资料: “Difference between __str__ and __repr__ in Python” Fluent Python
__(self): print("__repr__被触发") print("hahaha") m=MyClass("清菡") print(m) str(m) format...(m) 二、__repr__方法 repr方法除了在交互环境下会被触发,还有一种情况会被触发。...# def __str__(self): # print("---str--触发了--") # return self.name # # def __repr...__(self): # print("__repr__被触发") # return '<myClass.object-{}'.format(self.name) m=MyClass...__(self): print("__repr__被触发") return '<myClass.object-{}'.format(self.name) m=MyClass
在 Python 编程中,有时我们需要将对象转换为字符串格式,以便于打印输出、日志记录或数据存储等操作。Python 提供了多种方法来将对象转换为字符串。...如果没有在类中定义 __str__() 方法,str() 函数将调用对象的 __repr__() 方法来获取字符串表示形式。...方法二:使用 repr() 函数Python 内置的 repr() 函数可以将对象转换为可打印的字符串格式。这个函数会调用对象的 __repr__() 方法来获取对象的字符串表示形式。...我们在类中定义了 __repr__() 方法,该方法返回一个字符串,表示该对象的信息。...如果没有在类中定义 __repr__() 方法,repr() 函数将调用对象的 __str__() 方法来获取字符串表示形式。
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来提高性能和效率。
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内置类型
中的特殊函数,在我们创建类的时候,系统会我们隐式创造许多这样的特殊函数。...__repr__方法 你也许可能也听说过__repr__函数,它也可以实现根据我们的需要自定义输出的功能。比如我们把上面的代码改下函数名,也可以得到一样的结果。...所以当我们print输出给用户或者使用str函数进行类型转化的时候,Python都会默认优先调用__str__函数。...这两个函数如果我们只实现了一个,Python在调用的过程当中,都会执行那个被我们实现的。但是这两者本身的应用场景是有区别的,只是Python为了我们方便做了适配。...对于Python这门语言来说,我个人感觉实现功能只是其中很小的一个部分,把代码写得简洁美观,才是其中的大头。这也是为什么很多人都说Python易学难精的原因。
魔法函数是Python中的特性,学习好魔法函数将有助于我们写出优秀的pythonic(优雅的、地道的、整洁的)代码,同时因为Python语言的特性,我们在进行框架设计的时候除了设计模式等高级技能,魔法函数是必须使用的...如果我们在一个类中同时定义了__str__和__repr__函数,print和str函数会调用__str__,但是如果对象在列表内,打印时始终会调用__repr__,如果只定义了__repr__,那么print...、str都会调用__repr__,所以强烈建议在写类的时候,如果需要格式化输出,那么一定要定义一个__repr__函数。...中,字典的键必须是一个可哈希的对象,因为Python中的字典背后的实现是采用的哈希表,但是list对象是不能哈希的,自然就报错了,下面我们做一下修改: 奇迹的发现,list可以作为键了,因为我们重载了list...,实现了哈希函数,这样就满足了字典的要求 还有一些其他的魔法函数,我们下次再总结,Python中的魔法函数非常多,我们不需要全部记下,大概有个印象就可以了。
领取专属 10元无门槛券
手把手带您无忧上云