python3.x __str__与__repr__

__repr__和__str__用于显示,__str__是面向用户的,而__repr__面向coder【调试与开发】

repr(默认交互式回显)【来自python入门

str(也就是打印语句) 一般用途

输出的话先调用__str__,通常返回时字符串显示,

打印操作会先尝试__str__和str内置函数(print运行的内部等价形式)通常返回用户一个友好显示

__repr__用于所有其他环境之中:用于交互模式下提示回应以及repr函数,如果没有使用__str__,会使用print和str,通常返回一个编码字符串,可以用来创建对象,或者给开发者一个详细的显示

__repr__用于任何地方,除了当定义一个__str__的时候,使用print和str,要注意,没有定义__str__

打印还是使用__repr__,但是反过来不成立,其他环境(交互式响应模式)只是使用__repr__不需要尝试__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__的区别

原文地址:https://www.cnblogs.com/liuruoqian/p/11383751.html