day 21 双下repr

__str__ 

     str(obj),要求必须实现了__str__,要求这个方法的返回值必须是字符串str类型
# print %s str

__repr__
       是__str__的备胎.如果有__str__方法,那么# print %s str都先去执行__str__方法,并且使用__str__的返回值

      # 如果没有__str__,那么 print %s str都会执行repr
      # repr(obj),%r

输入形式

a = '123'       
print(a)          #  str形式  123
print(repr(a))       # repr形式    '123' 

 

 

输出的结果由谁来决定?

class A:
    def __init__(self,name):
        self.name = name
    def __str__(self):
        return '**%s**'%self.name
    def __repr__(self):
        return self.name

class B(A):
    def __init__(self,name):
        self.name = name
    def __repr__(self):
        return '***'


a = B('alex')
print(a)                        # **alex**
print(str(a),repr(a))       # **alex** ***
print('%s | %r'%(a,a))     # **alex** | ***

print('---%r---'%('abc'))     # ---'abc'---
print('---%s---'%('abc'))    # ---abc---

 

 

查找顺序

在子类中使用__str__,先找子类的__str__,没有的话要向上找,只要父类不是object,就执行父类的__str__

但是如果出了object之外的父类都没有__str__方法,就执行子类的__repr__方法,如果子类也没有,
还要向上继续找父类中的__repr__方法.
一直找不到 再执行object类中的__str__方法

posted @ 2020-03-26 15:13  蜗牛般庄  阅读(138)  评论(0编辑  收藏  举报
Title
页脚 HTML 代码