Python中这个_repr_函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串:
-
尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象 ;
-
否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) ;
-
一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。
__str__则对应str(object)这个函数:
- 返回一个可以用来表示对象的可打印的友好的字符串
- 对字符串,返回本身。
- 没有参数,则返回空字符串
- 对类,可通过 __str__() 成员控制其行为。该成员不存在,则使用其 __repr__() 成员。
- 与 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的对象。