zoukankan      html  css  js  c++  java
  • Python进阶-----通过类的内置方法__str__和__repr__自定制输出(打印)对象时的字符串信息

    __str__方法其实是在print()对象时调用,所以可以自己定义str字符串显示信息,在该方法return一个字符串,如果不是字符串则报错
    print(obj) 等同于-->str(obj) 等同于-->obj.__str__

    #未自定__str__信息
    class Foo:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    f = Foo('Menawey',24)
    print(f)   #<__main__.Foo object at 0x000002EFD3D264A8>  因为没有定制__str__,则按照默认输出
    
    #自定__str__信息
    class Foo:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __str__(self):
            return '名字是%s,年龄是%d'%(self.name,self.age)
    
    f1 = Foo('Meanwey',24)
    print(f1)           #名字是Meanwey,年龄是24
    s = str(f1)         #---> f1.__str__
    print(s)            #名字是Meanwey,年龄是24

    __repr__方法是在控制台直接输出一个对象信息或者print一个对象信息时调用,如果自定了__str__信息,print时默认执行__str__
    如果没有自定__str__,则print时执行__repr__

    #未自定__str__信息,自定了__repr__
    class Foo:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __repr__(self):
            return '来自repr-->名字是%s,年龄是%d'%(self.name,self.age)
    
    f2 = Foo('Meanwey',24)
    print(f2)               #来自repr-->名字是Meanwey,年龄是24   因为没有自定__str__,则执行__repr__
    
    #自定了__str__信息,自定了__repr__
    class Foo:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __str__(self):
            return '来自str-->名字是%s,年龄是%d'%(self.name,self.age)
    
        def __repr__(self):
            return '来自repr-->名字是%s,年龄是%d'%(self.name,self.age)
    
    f2 = Foo('Meanwey',24)
    print(f2)               #来自str-->名字是Meanwey,年龄是24   因为自定了__str__,则print时不会执行__repr__
  • 相关阅读:
    CSP -- 运营商内容劫持(广告)的终结者
    vue学习:解决Apycharm的 * is only available in ES6(use 'esversion: 6') 问题
    nvm、node、npm安装以及pycharm配置eslint
    python中的daemon守护进程实现方法
    python语言基础问题汇总
    python -- DNS处理模块dnspython
    Python ping 模块
    如何把Python脚本导出为exe程序
    从实际案例聊聊Java应用的GC优化
    Python类(六)-静态方法、类方法、属性方法
  • 原文地址:https://www.cnblogs.com/Meanwey/p/9788843.html
Copyright © 2011-2022 走看看