十. __str__ 和 __repr__

十. __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
'佩奇'
posted @ 2021-01-05 22:18  给你骨质唱疏松  阅读(97)  评论(0)    收藏  举报