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__方法

  • 相关阅读:
    CentOS系统更换软件安装源aliyun的
    判断手机电脑微信 js
    MFC HTTP
    阿里云 镜像 源 debian
    debian root 可以远程登陆
    java-dispose方法
    深入理解JAVA序列化
    Junit单元测试--01
    算法期末考试
    矩阵连乘 动态规划
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12574639.html
Copyright © 2011-2022 走看看