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__的主要内容,如果未能解决你的问题,请参考以下文章

python 重写__repr__与__str__函数

__str__与__repr__

python __str__ 与 __repr__区别

python中__str__与__repr__

python __str__ , __repr__区别

python Class:面向对象高级编程 __str__ / __repr__