python中__str__與__repr__的區別
阿新 • • 發佈:2019-04-29
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__的區別