zoukankan      html  css  js  c++  java
  • python的class的__str__和__repr__(转)

    本文参考自:

    https://stackoverflow.com/questions/18393701/the-difference-between-str-and-repr?noredirect=1&lq=1

    在stackoverflow上,有个兄弟问了这个问题:

    首先定义一个类:

    复制代码
    class Item():
        def __init__(self,name):
            self._name=name

      def __str__(self):
         return "Item's name is :"+self._name
    print((Item("Car"),))
    复制代码

    返回的是:

    C:Python35python.exe C:/fitme/work/nltk/1.py
    (<__main__.Item object at 0x000001DC3F9BB390>,)
    
    Process finished with exit code 0

     

    更改成这样的代码后:

    复制代码
    class Item():
        def __init__(self,name):
            self._name=name
        # def __str__(self):
        #     return "Item's name is :"+self._name
    
        def __repr__(self):
            return "Item's name is :" + self._name
    
    
    print((Item("Car"),))
    复制代码

    返回结果是:

    C:Python35python.exe C:/fitme/work/nltk/1.py
    (Item's name is :Car,)
    
    Process finished with exit code 0

    有人解答如下:

    1.对于一个object来说,__str__和__repr__都是返回对object的描述,只是,前一个的描述简短而友好,后一个的描述,更细节复杂一些。

    2.对于有些数据类型,__repr__返回的是一个string,比如:str('hello') 返回的是'hello',而repr('hello')返回的是“‘hello’”

    3.现在是重点了:

    复制代码
    Some data types, like file objects, can't be converted to strings this way. The __repr__ methods of such objects usually return a string in angle brackets that includes the object's data type and memory address. User-defined classes also do this if you don't specifically define the __repr__ method.
    
    When you compute a value in the REPL, Python calls __repr__ to convert it into a string. When you use print, however, Python calls __str__.
    
    When you call print((Item("Car"),)), you're calling the __str__ method of the tuple class, which is the same as its __repr__ method. That method works by calling the __repr__ method of each item in the tuple, joining them together with commas (plus a trailing one for a one-item tuple), and surrounding the whole thing with parentheses. I'm not sure why the __str__ method of tuple doesn't call __str__ on its contents, but it doesn't.
    复制代码

     

    print(('hello').__str__())
    print(('hello').__repr__())

    有一个更简单的例子如下:

    from datetime import datetime as dt
    print(dt.today().__str__())
    print(dt.today().__repr__())
    1
    2
    3
    4
    5
    C:Python35python.exe C:/fitme/work/nltk/1.py
    2017-06-16 11:09:40.211841
    datetime.datetime(2017, 6, 16, 11, 9, 40, 211841)
     
    Process finished with exit code 0

      

  • 相关阅读:
    C#实现一个最简单的HTTP服务器
    WinForm特效:桌面上的遮罩层
    C#利用GDI+绘制旋转文字等效果
    C#程序通过模板自动创建Word文档
    C#生成软件注册码
    C# 利用WORD模板和标签(bookmark) 批量生成WORD
    绝对好文:.NET程序性能的基本要领
    Mysql学习---SQL测试题之表结构
    Mysql学习---基础操作学习2
    Mysql学习---SQL语言的四大分类
  • 原文地址:https://www.cnblogs.com/YingxuanZHANG/p/8809497.html
Copyright © 2011-2022 走看看