十. __str__ 和 __repr__
1.__str__
- 触发条件 : print([对象]) 的时候触发
__str__ 的执行
class Person:
def __init__(self,name):
self.name = name
def __str__(self):
print("打印对象时触发了__str__")
return f"对象名字 : {self.name}" # 🔰返回值必须是一个字符串, 否则报错
P1 = Person("shawn")
P2 = Person("乔治")
print(P1)
# 打印对象时触发了__str__
# 对象名字 : shawn
print(P2)
# 打印对象时触发了__str__
# 对象名字 : 乔治
print(P2.name) # 乔治
🔰示例一:
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return f"{self.__dict__}"
P1 = Person("木之本樱",88)
print(P1) # {'name': '木之本樱', 'age': 88}
🔰示例二:
import json
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return json.dumps(self.__dict__)
P1 = Person("shawn",22)
print(P1) # {"name": "shawn", "age": 22}
2.__repr__
- 触发条件 : 在命令窗口中直接写 [对象] 时触发
__repr__的执行
>>> class Person:
... def __init__(self, name):
... self.name = name
... def __repr__(self):
... print("命令窗口直接写对象触发了__repr__")
... return f"名字 : {self.name}" # 🔰返回值也必须是一个字符串, 否则报错
...
>>> P1 = Person("佩奇")
>>> P1
命令窗口直接写对象触发了__repr__
名字 : 佩奇
>>> P1.name
'佩奇'