首先
先弄清楚str()与__str__、repr()与__repr__ 的区别,str()与repr()都是python中的内置函数,是直接用来格式化字符串的函数。而__str__与__repr__ 是在类(对象)中对类(对象)本身进行字符串处理。
其次
需要弄清楚str与repr之间的区别【引用】
python3
>>> help(str)Help on class str in module builtins:class str(object) | str(object='') -> str | str(bytes_or_buffer[, encoding[, errors]]) -> str | | Create a new string object from the given object. If encoding or | errors is specified, then the object must expose a data buffer | that will be decoded using the given encoding and error handler. | Otherwise, returns the result of object.__str__() (if defined) | or repr(object). | encoding defaults to sys.getdefaultencoding(). | errors defaults to 'strict'.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
python2
class str(basestring) | str(object='') -> string | | Return a nice string representation of the object. | If the argument is a string, the return value is the same object.
- 1
- 2
- 3
- 4
- 5
str【引用】
返回一个可以用来表示对象的可打印的友好的字符串
对字符串,返回本身。
没有参数,则返回空字符串 对类,可通过__str__()
成员控制其行为。该成员不存在,则使用其 __repr__()
成员。 与 repr 区别:不总是尝试生成一个传给 eval 的字符串,其目标是可打印字符串。
python3
>>> help(repr)Help on built-in function repr in module builtins: repr(obj, /) Return the canonical string representation of the object. For many object types, including most builtins, eval(repr(obj)) == obj.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
python2
repr(...) repr(object) -> string Return the canonical string representation of the object. For most object types, eval(repr(object)) == object.
- 1
- 2
- 3
- 4
- 5
repr【引用】
返回一个可以用来表示对象的可打印字符串
首先,尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象
否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) 一个类(class)可以通过__repr__()
成员来控制repr()函数作用在其实例上时的行为。 class a(): def __unicode__(self): pass def __str__(self): pass def __repr__(self): pass
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
>>> help(eval)Help on built-in function eval in module builtins: eval(source, globals=None, locals=None, /) Evaluate the given source in the context of globals and locals. The source may be a string representing a Python expression or a code object as returned by compile(). The globals must be a dictionary and locals can be any mapping, defaulting to the current globals and locals. If only globals is given, locals defaults to it.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
>>> eval('1+2')3>>> str('1+2')'1+2'>>> repr('1+2') "'1+2'" >>> type(repr('1+2'))>>> type(str('1+2')) >>> type(eval('1+2')) #就相当于上面说的eval(repr(object)) == object >>> eval(repr('1+2')) '1+2' >>> '1+2' '1+2'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
示例
#test2.pyclass A(object): def __str__(self): return "__str__" def __repr__(self): return "__repr__" a = A() b = A
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
>>> import test2>>> test2.a__repr__>>> print(test2.a)__str__>>> test2.b>>> print(test2.b) 转载:http://blog.csdn.net/foryouslgme/article/details/51658057