Каждый объект OBJ имеет метод obj.__repr__()
При вызове, этот метод возвращает объект строки, который является «официальным» для печати представление объекта OBJ
Когда интерпретатор Python встречает
строка print obj
в сценарии
или >>> obj
в командной строке,
Вызывается метод __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))))
# Only in Python 1 and Python 2, string conversions with
# reversed quotes produce the same result as repr():
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
представляет собой адрес памяти объекта (здесь функция), то есть в целое число, который ссылается на местоположение объекта в ОЗУ.
0x00FB2930
является hexinteger, то есть буквальным, представляющее значение адреса памяти в базе 16.
Этот адрес памяти точно, возвращенное встроенной функцией id()
, значение которого выводится в виде decimalinteger буквальным, то есть свое представительство в базе 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'>
Спасибо большое !!! – JadedTuna
@ Vik2015 Нет, см. [Http://stackoverflow.com/q/1396668/395760](http://stackoverflow.com/q/1396668/395760) – delnan