当在列表中存放自定义对象,修改对象的__str__()
方法之后,直接打印列表,打印出的仍然是对象的内存地址
class person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return "我的名字是%s" % self.name
jack = person("jack", 18)
jacky = person("jacky", 28)
mike = person("mike", 38)
list1 = [jacky, jack, mike]
print(list1)
"""输出结果为:
[<__main__.person object at 0x0000020384B95F30>, <__main__.person object at 0x0000020384B97970>, <__main__.person object at 0x0000020384BDBBB0>]
"""
原因分析:
当直接打印list的时候,是由list调用的对象的输出信息方法,它会默认调用__repr__()
方法,而不是__str__()
方法,__str__()
该方法是面向用户的,__repr__()
方法是面向程序员的,
所以当某一个对象放在列表中输出的时候,要重写__repr__()
方法而不是__str__()
解决方案:
def __repr__(self):
return "我的名字是%s" % self.name
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)