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__().
-
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 beevaled to create the object. that is,obj == eval(repr(obj))should, but does not always in practice, yield
TrueI 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>' >>>inspectorG4dget : Why does obj == eval(repr(obj)) not always give True? Would you be able to give an example?Avi : For a complex object, such as a file, it will not necessarily return True.Mike Axiak : @inspectorG4dget: obj == eval(type('myclass', (), {}))inspectorG4dget : Many thanks @AaronMcSmooth, @Avi, @MikeAxiak for explaining this. ++ to allFrom aaronasterling -
repr(obj)callsobj.__repr__.This is intended to clearly describe an object, specially for debugging purposes. More info in the docs
Flávio Amieiro : @S.Lott thanks for pointing out my markup mistake, it's fixed now. I just don't know which guidelines you're referring to.From Flávio Amieiro -
In python 2.x,
`obj`will end up callingobj.__repr__(). It's shorthand forrepr().S.Lott : -1: Deprecated syntax, which will be removed.recursive : @S. Lott: Noted in answerFrom recursive -
Not only does repr get called when you use repr(), but also in the following cases:
- You type obj in the shell and press enter.
- You ever print an object in a dictionary/tuple/list. E.g.: print [u'test'] does not print ['test']
From Mike Axiak
0 comments:
Post a Comment