• python中__str__和__repr__的区别


    Python中这个_repr_函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串:

    1. 尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象 ;

    2. 否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) ;

    3. 一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。

    __str__则对应str(object)这个函数:

    1.   返回一个可以用来表示对象的可打印的友好的字符串
    2.   对字符串,返回本身。 
    3.   没有参数,则返回空字符串 
    4.   对类,可通过 __str__() 成员控制其行为。该成员不存在,则使用其 __repr__() 成员。
    5.   与 repr 区别:不总是尝试生成一个传给 eval 的字符串,其目标是可打印字符串。

    例子1:

    >>> class D(object):
    ...     def __str__(self):
    ...         return "a __str__"
    ...     def __repr__(self):
    ...         return "a __repr__"
    ...
    >>> dr = D()
    >>> print dr
    a __str__
    >>> dr
    a __repr__
    >>> "%s" % dr
    'a __str__'
    >>> "%r" % dr
    'a __repr__'

    Python中,有的操作符和函数是做同样的事情,原因是某些场合下函数会比操作符更适合使用,比如函数对象可作为参数传递。

     repr() 输出对 Python比较友好,而str()的输出对用户比较友好。

    例子2:

     1 class User(object):  
     2     """"""  
     3    
     4     #----------------------------------------------------------------------  
     5     def __init__(self, name, fullname, password):  
     6         """Constructor"""  
     7         self.name = name  
     8         self.fullname = fullname  
     9         self.password = password  
    10    
    11     def __repr__(self):  
    12         return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password) 

    以上代码为SqlAlchemy ORM框架的一部分代码,这里__repr__返回一个User的对象。

  • 相关阅读:
    D365: 笔记(VS无法打开表浏览器)
    D365: 笔记(跟踪调试批处理代码)
    D365: 笔记(非批处理执行class中弹出交互式窗体或报表)
    D365: 笔记(现有量增加批号表字段查询条件)
    D365: 新功能(二)采购发票自动化流程
    D365: 新功能(一)按日期设置编号规则
    ES6 入门教程(未完)
    深入理解TypeScript(未完)
    项目
    vue + threejs 项目踩坑总结
  • 原文地址:https://www.cnblogs.com/mzpy1119/p/5394402.html
Copyright © 2020-2023  润新知