Python中str()与__str__、repr()与__repr__、eval()、__unicode__的关系与区别

 

原创 2016年06月13日 15:26:19

这里写图片描述

首先

先弄清楚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'))
<class 'str'>
>>> type(str('1+2'))
<class 'str'>
>>> type(eval('1+2'))
<class 'int'>
#就相当于上面说的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.py
class 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
<class 'test2.A'>
>>> print(test2.b)
<class 'test2.A'>

转载:http://blog.csdn.net/foryouslgme/article/details/51658057
posted on 2017-11-29 17:21  chenyang13677  阅读(605)  评论(0编辑  收藏  举报