prosseek
prosseek

Reputation: 190659

When __repr__() is called?

print OBJECT calls OBJECT.__str__(), then when OBJECT.__repr__() is called? I see that print OBJECT calls OBJECT.__repr__() when OBJECT.__str__() doesn't exist, but I expect that's not the only way to call __repr__().

Upvotes: 24

Views: 16507

Answers (4)

recursive
recursive

Reputation: 86064

In python 2.x, `obj` will end up calling obj.__repr__(). It's shorthand for repr().

Upvotes: 1

Mike Axiak
Mike Axiak

Reputation: 11996

Not only does __repr__() get called when you use repr(), but also in the following cases:

  1. You type obj in the shell and press enter
  2. You ever print an object in a dictionary/tuple/list. E.g.: print [u'test'] does not print ['test']

Upvotes: 11

Flávio Amieiro
Flávio Amieiro

Reputation: 44156

repr(obj) calls obj.__repr__.

This is intended to clearly describe an object, specially for debugging purposes. More info in the docs

Upvotes: 4

aaronasterling
aaronasterling

Reputation: 70984

repr(obj)

calls

obj.__repr__

the purpose of __repr__ is that it provides a 'formal' representation of the object that is supposed to be a expression that can be evaled to create the object. that is,

obj == eval(repr(obj))

should, but does not always in practice, yield True

I was asked in the comments for an example of when obj != eval(repr(obj)).

class BrokenRepr(object):
    def __repr__(self):
        return "not likely"

here's another one:

>>> con = sqlite3.connect(':memory:')
>>> repr(con)
'<sqlite3.Connection object at 0xb773b520>'
>>> 

Upvotes: 32

Related Questions