python3.x __str__与__repr__
Posted liuruoqian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3.x __str__与__repr__相关的知识,希望对你有一定的参考价值。
__repr__和__str__用于显示,__str__是面向用户的,而__repr__面向coder【调试与开发】
输出的话先调用__str__,通常返回时字符串显示,
__repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用__str__,会使用print和str。
它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示
以下是打印一个对象的信息,
重载该类的__str__,__repr__,__gt__,__lt__,__eq__等
class Person(object):
def __init__(self, name, gender,age, **kw):
self.name=name
self.gender=gender
self.age=age
#for k,v in kw.iteritems():py2.x
for k,v in kw.items():#py3.x
setattr(self, k, v)
def __eq__(self, value):
if self.gender == value.gender:
return 1
else:
return 0
def __gt__(self, value):
if self.gender > value.gender:
return 1
else:
return 0
def __lt__(self, value):
if self.gender < value.gender:
return 1
else:
return 0
def __repr__(self):
return ‘(Student_repr: %s, %s)‘%(self.name, self.gender)
def __str__(self):
#print(self.name+‘ ‘+self.gender)这里不能直接print只能return
return ‘(Student: %s, %s)‘%(self.name, self.gender)
def __cmp__(self,s):
if self.score == s.score:
return self.name> s.name
return -(self.score>s.score)
p = Person(‘Bob‘, ‘Male‘, age=18, course=‘Python‘)
L = [Person(‘Tim‘, 99, 18), Person(‘Bob‘, 68, 28), Person(‘Alice‘, 99, 29)]
def new_sort(obj):
if obj.gender>=90:
print(1)
elif obj.gender>=60:
print(2)
else:
print(3)
#print (p.age)
#print (p.course)
#print(p)
#print(L)
sorted(L, reverse=True)
print(L)#为什么这里输出的是list里面对象的地址? 这就是__str__跟__repr__的区别
以上是关于python3.x __str__与__repr__的主要内容,如果未能解决你的问题,请参考以下文章