每个对象
obj都有一个方法
obj.__repr__( )
当调用该方法时,它返回一个字符串对象,该对象是对象
obj的“官方”可打印表示形式。
当Python解释器在脚本中遇到一行
print obj
或在命令行中遇到
>>> obj
时,将调用对象的
__repr__( )方法,并显示返回的代表字符串的值。
对象的__repr__( )方法可以通过使用内置函数repr( )并将对象名称作为参数来调用,从而将__repr__( )返回的字符串分配给标识符,以便能够对该表示执行操作。
仅在Python 1和Python 2中,对象名称周围的反引号具有与调用repr( )相同的效果。
比较:
def main():
pass
if '__repr__' in dir(main):
print ('__repr__ is a method of main\n')
else:
print ('main has no method __repr__\n')
print ('main : %s\n'
'type(main) == %s\n'
% (main,type(main)) )
print ('repr(main) : %s\n'
'type(repr(main)) == %s'
%(repr(main),type(repr(main))) )
print ('\n`main` : %s\n'
'type(`main`) == %s'
% (`main`,type(`main`)) )
结果
__repr__ is a method of main
main : <function main at 0x00FB2930>
type(main) == <type 'function'>
repr(main) : <function main at 0x00FB2930>
type(repr(main)) == <type 'str'>
.
在
<function main at 0x00FB2930>
中,部分
0x00FB2930
表示对象(这里是函数)的
内存地址,也就是一个
整数,它引用了RAM中对象的位置。
0x00FB2930
是一个
十六进制整数,也就是一个字面上表示内存地址值的16进制数字。
这个内存地址恰好由内置函数
id()
返回,它的值被打印为
十进制整数字面量,也就是它在10进制中的表示。
print ('repr(main) : %s\n'
'type(repr(main)) == %s\n'
% (repr(main),
type(repr(main))) )
hex_address = repr(main)[18:-1]
print ('hex_address = repr(main)[18:-1] defined\n'
'hex_address : %s\n'
'type(hex_address) == %s\n'
'int(hex_address , 16) : %s\n'
'type(int(hex_address , 16)) : %s\n'
% (hex_address,
type(hex_address),
int(hex_address , 16),
type(int(hex_address , 16))) )
print ('id(main) : %s\n'
'type(id(main)) == %s\n'
'hex(id(main) : %s\n'
'type(hex(id(main)) : %s'
% (id(main),
type(id(main)),
hex(id(main)),
type(hex(id(main)))) )
结果
repr(main) : <function main at 0x00FB2930>
type(repr(main)) == <type 'str'>
hex_address = repr(main)[18:-1] defined
hex_address : 0x00FB2930
type(hex_address) == <type 'str'>
int(hex_address , 16) : 16460080
type(int(hex_address , 16)) : <type 'int'>
id(main) : 16460080
type(id(main)) == <type 'int'>
hex(id(main) : 0xfb2930
type(hex(id(main)) : <type 'str'>