2. repr函数重载

repr(obj)函数

repr(obj) 返回一个附合 Python 语法规则且能代表此对象的表达式字符串。

通常:

eval(repr(obj)) == obj  # 结果为True。

自定义的类的repr(obj)函数通常返回该类的构造函数表达式的字符串或字面值。

repr(obj) 函数的重载

内置函数
对应的特殊方法
说明
repr(obj)
__repr__()
返回对象的字面值的字符串表示(通常可用于 eval() 重建)

示例

# repr(obj) 函数重载 示例

class Human:
    def __init__(self, name, age):
        self.name, self.age = name, age

    def __str__(self):
        return f'{self.age}岁的{self.name}'

    def __repr__(self):
        return 'Human('+repr(self.name)+ ',' + repr(self.age) + ')'


h1 = Human('张三', 18)
print(h1)
s1 = repr(h1)  # s1 = "Human('张三',18)"
print(s1)

h2 = eval(s1)
print(h2)

repr(obj)函数调用方法说明

  1. repr(obj) 函数先查找 obj.__repr__() 方法,调用此方法并返回结果。
  2. 如果 obj.__repr__() 方法不存在,则调用 object 类的对象的 __repr__() 方法显示 <__main__.xxxClass object at 0x102a8ea20> 格式的字符串。

str(obj)函数调用方法说明

  1. str(obj)函数先查找 obj.__str__() 方法,调用此方法并返回结果。
  2. 如果 obj.__str__() 方法不存在,则调用 obj.__repr__()方法并返回结果。
  3. 如果 obj.__repr__() 方法不存在,则调用 object 类的对象的 __repr__() 方法显示 <__main__.xxxClass object at 0x102a8ea20> 格式的字符串。

printf风格的字符串格式化中的转换符

转换符
含意
'r'
使用 repr() 转换任何 Python 对象。
's'
使用 str() 转换任何 Python 对象。

示例

# printf风格的字符串格式化的转换符

print('%r' % h1)  # 打印:Human('张三',18)
print('%s' % h1)  # 打印:18岁的张三