zoukankan      html  css  js  c++  java
  • 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__方法

  • 相关阅读:
    大整数乘除法
    java大神进阶之路
    自定义Swap
    指针基础详解
    已知前序中序求后序(转载)
    杭电1003_Max Sum
    回溯法求解迷宫问题
    linux下安装QQ等EXE文件
    java工程中使用freemarker例子
    maven自动部署到tomcat的问题
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12574639.html
Copyright © 2011-2022 走看看