zoukankan      html  css  js  c++  java
  • python中__str__与__repr__的区别

    str__和__repr

    __str__和__repr__都是python的内置方法,都用与将对象的属性转化成人类容易识别的信息,他们有什么区别呢

    来看一段代码

    from math import hypot
    
    
    class Vector:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __str__(self):
            return 'Vector(%r,%r)' % (self.x, self.y)
    
        def __abs__(self):
            return hypot(self.x, self.y)
    
        def __bool__(self):
            return bool(abs(self))
    
        def __add__(self, other):
            x = self.x + other.x
            y = self.y + other.y
            return Vector(x,y)
    
        def __mul__(self, scalar):
            """相乘时调用__mul__方法"""
            return Vector(self.x * scalar, self.y * scalar)
    
    

    在控制台进行如下输入 ```python from cheapter_1.vector import Vector v1=Vector(3,4) v1 print(v1) Vector(3,4)
    
    <br>
    把__str__换成__repr__
    ```python
        def __repr__(self):
            return 'Vector(%r,%r)' % (self.x, self.y)
    
    

    在控制台重复上述操作 ```python from cheapter_1.vector import Vector v1 = Vector(3,4) v1 Vector(3,4) print(v1) Vector(3,4) ```
    同时定义__str__和__repr__
        def __str__(self):
            return "in __str__"
    
        def __repr__(self):
            return 'Vector(%r,%r)' % (self.x, self.y)
    

    在控制台进行以下操作 ```python from cheapter_1.vector import Vector v1=Vector(3,4) v1 Vector(3,4) print(v1) in __str__
    
    <br>
    ## 小结
    __str__和__repr__的区别主要有以下几点
    - __str__是面向用户的,而__repr__面向程序员去找
    - <b><font color='red'>打印操作会首先尝试__str__和str内置函数(print运行的内部等价形式),如果没有就尝试__repr__,都没有会输出原始对象形式</font></b>
    - <b><font color='red'>交互环境输出对象时会调用__repr__</font></b>
    
    
    <br>
    更多关于__str__与__repr__的区别:<a href='https://stackoverflow.com/questions/1436703/difference-between-str-and-repr'>Difference between __str__ and __repr__?</a>
    
    本文部分代码来源:fluent python by Luciano Ramalho(O'Reilly).Copyright 2015 Luciano Ramalho,978-1-491-94600-8
  • 相关阅读:
    MySQL select语句中where条件的提取过程
    MySQL特性:ICP,Index Condition Pushdown
    MySQL特性:BKA,Batched Key Access,批量索引访问
    MySQL特性:MRR,Multi-Range Read,多范围读
    show engine innodb status 输出结果解读
    IPv6的一点使用小计
    MySQL 通过ibd恢复数据
    explain 小结
    clickhouse的多路径存储策略
    cenos6.5升级glibc2.18
  • 原文地址:https://www.cnblogs.com/zzliu/p/10787606.html
Copyright © 2011-2022 走看看