1. 程式人生 > >python中__str__與__repr__的區別

python中__str__與__repr__的區別

math class 重復 add 一段 The pri __add__ 人類

__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)



在控制臺進行如下輸入

from cheapter_1.vector import Vector
v1=Vector(3,4)
v1
<cheapter_1.vector.Vector object at 0x000001D7B67BDA90>
print(v1)
Vector(3,4)



把__str__換成__repr__

    def __repr__(self):
        return 'Vector(%r,%r)' % (self.x, self.y)



在控制臺重復上述操作

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)



在控制臺進行以下操作

from cheapter_1.vector import Vector
v1=Vector(3,4)
v1
Vector(3,4)
print(v1)
in __str__


小結

__str__和__repr__的區別主要有以下幾點

  • __str__是面向用戶的,而__repr__面向程序員去找
  • 打印操作會首先嘗試__str__和str內置函數(print運行的內部等價形式),如果沒有就嘗試__repr__,都沒有會輸出原始對象形式
  • 交互環境輸出對象時會調用__repr__

python中__str__與__repr__的區別