> # In the code below, "a.__str__()" does not default to "a.__repr__() as > # might be expected. It finds the "__str__" in the base class X. The > # Reference Manual, section 3.3.1, says: > # If a class defines __repr__() but not __str__(), then __repr__() is > # also used when an 'informal' string representation of instances of > # that class is required. > # If the reader is in lawyer mode, the documentation is correct. > # Is the current behavior what was intended? What should the behavior be? > > class X(object): > def __str__(self): > return 'str for X' > > def __repr__(self): > return 'repr for X' > > class A(X): > def __repr__(self): > return 'repr for A' > > # __str__ = __repr__ > > x = X() > a = A() > print x.__str__() > print x.__repr__() > print a.__str__() > print a.__repr__() This has never been different and the current outcome is exactly what was intended. The only case where __repr__ and __str__ act as each other's default is when there's no base class. And in any case, you're not supposed to call __str__ or __repr__ directly -- you should call str(x) or repr(x), etc. -- not that it makes a difference here. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4