Python-何时调用__repr__
已于 2025年01月16日 16:49 修改
访问次数:12
__repr__ 是 Python 中的一个特殊方法,当需要得到一个对象的“官方字符串表示”时会被调用。以下是常见调用 __repr__ 的场景:
1. 直接在交互式解释器中输入对象时
如果在 Python 的交互式解释器中直接输入对象的变量名,而不是显式调用 print,解释器会调用 __repr__ 方法来显示该对象的字符串表示。
class Cat:
def __repr__(self):
return "Cat('Tom')"
cat = Cat()
cat # 会调用 cat.__repr__()
# 输出: Cat('Tom')
2. 使用内置函数 repr() 时
显式调用 repr(obj) 会触发对象的 __repr__ 方法。
class Dog:
def __repr__(self):
return "Dog('Spike')"
dog = Dog()
print(repr(dog)) # 调用 dog.__repr__()
# 输出: Dog('Spike')
3. 容器类型中包含该对象时
当对象出现在如列表、字典、集合等容器类型中时,Python 会调用 __repr__ 方法来显示对象。
class Bird:
def __repr__(self):
return "Bird('Tweety')"
bird = Bird()
print([bird]) # 调用 bird.__repr__()
# 输出: [Bird('Tweety')]
4. 用于调试信息
__repr__ 的设计初衷是提供“尽可能详细”的对象信息,便于调试,因此在一些调试工具或日志中会自动调用 __repr__。
5. 当 __str__ 未定义时
如果一个对象同时定义了 __str__ 和 __repr__,print(obj) 会优先调用 __str__。但如果 __str__ 未定义,print(obj) 会退而调用 __repr__。
class Fish:
def __repr__(self):
return "Fish('Goldfish')"
fish = Fish()
print(fish) # __str__ 未定义,调用 __repr__()
# 输出: Fish('Goldfish')
总结
- 设计目标:
__repr__方法的返回值应尽量清晰、完整,通常是一个有效的 Python 表达式,能用来重新创建对象。 - 触发时机:
repr(obj)、交互式环境直接输入对象、容器类型打印、__str__缺失时调用等。
如果要让对象在用户友好的上下文中显示,比如 print 输出,可以考虑同时定义 __str__,提供更简洁的输出。
评论(0)