python-str和repr内置属性
一、先看一种现象
l = list("2323") print(l) # 打印的是列表 class Foo: def __init__(self, name, age): self.name = name self.age = age foo = Foo("张三",50) print(foo) # 打印的是内存地址 print(str(foo)) print(foo.__str__()) # str(foo) -->foo.__str__()
运行结果
['2', '3', '2', '3'] <__main__.Foo object at 0x0000000001DFCFD0> <__main__.Foo object at 0x0000000001DFCFD0> <__main__.Foo object at 0x0000000001DFCFD0>
这是由于__str__造成的。print的本质就是触发__str__
我们重写__str__这个方法,就能定制不同的字符串输出结果
二、定制对象的__str__
注意:__str__返回的值必须是一个字符串
class Foo: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return "姓名:%s 年龄:%s " %(self.name,self.age) foo = Foo("张三",50) print(foo) # 打印了__str__ 的返回内容
运行结果
姓名:张三 年龄:50
三、__repr__
__repr__也是用于修改打印输出的,区别是__repr__是在解释器交互窗口时触发
>>> class Foo: ... def __init__(self, name, age): ... self.name = name ... self.age = age ... ... def __str__(self): ... return "姓名:%s 年龄:%s " %(self.name,self.age) ... ... def __repr__(self): ... return "姓名--%s 年龄--%s " % (self.name, self.age) ... >>> foo = Foo("张三",50) >>> Foo("张三",50) 姓名--张三 年龄--50 # 打印的是__repr__返回内容
当只重写了__repr__,没有重写__str__,print时会触发__repr__的内容
class Foo: def __init__(self, name, age): self.name = name self.age = age # def __str__(self): # return "姓名:%s 年龄:%s " %(self.name,self.age) def __repr__(self): return "姓名--%s 年龄--%s " % (self.name, self.age) foo = Foo("张三",50) print(foo) # str(foo) -->foo.__str__()-->foo.__repr__() 找不到__str__,则使用__repr__;__repr__也没有则默认打印内存地址
运行结果
姓名--张三 年龄--50
浙公网安备 33010602011771号