首页 > 编程语言 >Python __str__ 和 __repr__

Python __str__ 和 __repr__

时间:2024-05-19 14:07:28浏览次数:32  
标签:__ name Python self repr str age

在Python中,__str____repr__ 是两个非常重要的特殊方法,它们用于定义对象的字符串表示形式,但它们的用途和场景稍有不同:

__str__ 方法

__str__ 方法提供了对象的“人性化”字符串表示,它的目的是为了方便人类阅读和理解。当你使用 print() 函数打印一个对象,或者直接将对象用在字符串环境中(例如使用 %s 格式化字符串时),Python 会调用这个方法来获取对象的字符串形式。

理想的 __str__ 返回值应该是清晰、易读的,适合终端用户查看。

例如:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"{self.name}, {self.age} years old"

p = Person("Alice", 30)
print(p)  # 输出: Alice, 30 years old

 

__repr__ 方法

__repr__ 方法提供了对象的“官方”字符串表示,它的目的是为程序员提供一个准确且无歧义的对象描述,以便于调试和开发。当一个对象在交互式环境中未被正确格式化展示时(例如在Python解释器中直接输入对象名称),

Python 会调用 __repr__ 方法来获取该对象的字符串表示。__repr__ 的输出应该包含足够的信息,使得有经验的程序员能够重现这个对象。

理想的 __repr__ 字符串应该是合法的Python表达式,这意味着在很多情况下,通过 eval() 执行 __repr__ 的返回值应该能够得到一个与原对象相等的新对象。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __repr__(self):
        return f"Person('{self.name}', {self.age})"

p = Person("Alice", 30)
print(repr(p))  # 输出: Person('Alice', 30)

 

总结来说,__str__ 更关注可读性和用户友好性,而 __repr__ 则侧重于精确性和可重构性。在实际编程中,根据需要可以定义其中一个或同时定义两者,以满足不同的应用场景。

 

标签:__,name,Python,self,repr,str,age
From: https://www.cnblogs.com/bruce-he/p/18200293

相关文章

  • 皮卡鱼象棋AI
    第1盘:(黑方赢)1.炮二平五马8进72.马二进三卒7进13.车一平二车9平84.车二进四马2进35.兵七进一象3进56.马八进七炮2进27.马七进六马7进88.车二平四炮2进19.炮八平六卒3进110.相七进九车1平211.车九平八士6进512.兵五进一炮2平413.车八进九炮4平614.车八退三马8进715.兵七进一炮8平71......
  • 在 Zig 中实现接口
    在Zig中实现接口实现接口的关键是遵循特定的函数调用约定,包含接口通常由函数原型和定义组成,表示了一组要被实现的方法或行为。实现接口的关键在于确保函数的参数类型和返回值等方面与接口定义一致。抽象:可以通过使用函数指针、结构体和指针、泛型等技术来实现。抽象的目的是......
  • UE4 C++ 攀爬功能
    UE中的TEXT()UE中使用TEXT()包含字符串后,将字符串转换为宽字符,其将被处理为支持Unicode和跨平台兼容性,而普通类型的字符串为一个窄字符类型,可能在跨平台出现问题。最主要的问题是在FString的构造函数中是接受TCHAR的所以对于FStringFNameFTEXT的构造需要传入TEXT("xxxx")。......
  • 问题图片
    ......
  • 实验4
    task1_1.c点击查看代码#include<stdio.h>#defineN4voidtest1(){inta[N]={1,9,8,4};inti;printf("sizeof(a)=%d\n",sizeof(a));for(i=0;i<N;++i)printf("%p:%d\n",......
  • Cinderella
    Besidethebedwheremyfrailmotherlay,hopelessnessenvelopedusboth.Despiteourfamily'swealth,itprovedpowerlessagainsttheinevitabilityofherfate.Herpassingleftmeinsolitude,hermemoryforeverentwinedwiththeblossomsinthega......
  • 消防二总线通信原理简介
    典型应用图 首先需要设计一种可编码寻址通用联动控制接口件。一方面它作为二总线上的挂接设备——能被区域控制器寻址,同时返回自身的状态信息;另一方面当区域控制器需要联动它所控制的消防设备时能提供控制触点。如图①,通用联动接口通过桥式输入电路与总线相联,桥式输入电......
  • Mysql新建日历表
    新建最近几十年的天 CREATETABLEifnotexistscalendar(account_daydate);INSERTINTOcalendar(account_day)SELECTDATE_ADD('2024-01-01',INTERVALnDAY)FROM(SELECTa.N+b.N*10+c.N*100+d.N*1000ASnFROM(SELECT0ASNUNIONSELECT1......
  • written script
    Iamayoungadultwhowasfortunateenoughtohavebeenraisedbyalovingcommunityofneighbors,havingbeenorphanedatatenderage.Drivenbyadeepsenseofgratitudeandawarmheart,Ihavestrivedtobeamanofvirtueandhardwork.Mydiligenc......
  • C#特性
    目录C#特性1.概括2.语法定义特性类应用特性获取特性3.应用场景数据验证序列化和反序列化描述性元数据依赖注入单元测试权限控制AOP(面向切面编程)总结引用C#特性1.概括C#中的特性是一种用于向代码元素添加元数据的机制。它们允许程序员在代码中添加额外的信息,以影响程序的行......