zoukankan      html  css  js  c++  java
  • __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__()方法
    
  • 相关阅读:
    留言板!
    NX二次开发-OLE/COM向EXCEL表格中插入图片
    NX二次开发-UFUN读取图纸尺寸的值UF_DRF_ask_dimension_text
    NX二次开发-UFUN修剪体UF_MODL_trim_body
    NX二次开发-UFUN相加布尔操作,可保留或删除目标体,工具体UF_MODL_unite_bodies_with_retained_options
    C++之判断字符串是否是数字
    CommandLineToArgvW调EXE传入参数【转载】
    NX二次开发-用户自定义资源栏选项卡RegisterActivationCallback
    NX二次开发-自定义添加右键菜单RegisterConfigureContextMenuCallback
    NX二次开发-调系统命令UF_load_library[UFUN调DLL]
  • 原文地址:https://www.cnblogs.com/long-holiday/p/9913641.html
Copyright © 2011-2022 走看看