[Python-Dev] str does not default to repr if a base class has str (original) (raw)

Guido van Rossum guido at python.org
Mon May 17 23:48:25 EDT 2004


# 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/)



More information about the Python-Dev mailing list