• __repr__()


    class A :
        def __init__(self,name):
            self.name=name
        #def __str__(self):
        #    return '**%s**'%self.name
        def __repr__(self):
            return self.name
    a=A('alex')
    print(a)#类中没有__repr__()方法 也没有__str__()方法的时候 print(a)打印a对象的内存地址
            #类中有了__repr__()方法后  没有__str__()方法 print(a) 打印alex
            #类中有__str__()方法 也有__repr__()方法 打印 **alex**
    print(str(a),repr(a))#str(obj)触发了__str__()方法 repr(obj)触发了 __repr__()方法
    print('%s | %r'%(a,a))#%s触发了__str__()方法 %a触发了__repr__()方法
    #print('----%r---'%('abc'))#r是'abc'
    #结论:repr(obj)和%r 调用___repr__()方法
        #str(obj) %s 调用__str__()方法
        #__repr__()方法是__str__()方法的备胎。如果有__str__()方法,那么print('%s) str(obj)都先去执行__str__()方法,并且使用__str__()方法的返回值
        #如果没有__str__()方法,那么print('%s') str(oj)都会执行__repr__()方法
    
    #只有__str__()方法的时候 print(str(a),repr(a))打印的是 **alex** <__main__.A object at 0x007BB9B0>
    #只有__str__()方法的时候 print('%s | %r'%(a,a))打印的是**alex** | <__main__.A object at 0x007BB9B0>
    #只有__repr__()方法的时候 print(str(a),repr(a))打印的是alex alex
    #只有__repr__()方法的时候 print('%s | %r'%(a,a))打印的是alex | alex
    
    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 __str__(self):
        #    return '***'
        def __repr__(self):
            return '~~~~'
    a=B('alex')
    print(a)
    print(str(a),repr(a))#当子类B中只有__init__()方法 print(str(a),repr(a))打印**alex** alex
    print('%s |%r'%(a,a))#当子类B中只有__init__()方法 print('%s |%r'%(a,a))打印**alex** |alex
                        #当子类B中有__str__()方法 ,没有__repr__() print(str(a),repr(a))打印*** alex
                        #当子类B中有__str__()方法 ,没有__repr__() print('%s |%r'%(a,a))打印*** alex
                        #当子类B中有__repr__()方法,没有__str__() print(str(a),repr(a))打印**alex** ~~~~
                        #当子类B中有__repr__()方法,没有__str__() print("%s |%r'%(a,a))打印**alex** ~~~~
    
    #----------结论:在子类中使用__str__()先找子类的__str__() 没有的话向上找,只要父类不是object,就执行父类的__str__()方法
                     #但是如果出了object之外的父类都没有__str__()方法,就执行子类的__repr__()方法,如果子类也没有,还要向上继续找父类中的__repr__()方法
                     #一直找不到 再执行object类中的__repr__()方法
    
  • 相关阅读:
    VS2010中经常使用的快捷键
    IE无法打开internet网站已终止操作的解决的方法
    Spring3.0 AOP 具体解释
    Java 反射机制[Method反射]
    软件測试自学指南---从入门到精通
    Java中Map的使用
    tracert路由跟踪命令分析判断
    C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
    ORACLE触发器具体解释
    Androidclient推断server是否开启 HttpHostException解决方式
  • 原文地址:https://www.cnblogs.com/long-holiday/p/9913641.html
Copyright © 2020-2023  润新知