Why does str(A()) seemingly call A.__repr__() and not dict.__str__() in the example below?
class A(dict):
    def __repr__(self):
        return 'repr(A)'
    def __str__(self):
        return dict.__str__(self)
class B(dict):
    def __str__(self):
        return dict.__str__(self)
print 'call: repr(A)  expect: repr(A)  get:', repr(A())   # works
print 'call: str(A)   expect: {}       get:', str(A())    # does not work
print 'call: str(B)   expect: {}       get:', str(B())    # works
Output:
call: repr(A)  expect: repr(A)  get: repr(A)
call: str(A)   expect: {}       get: repr(A)
call: str(B)   expect: {}       get: {}
                str(A()) does call __str__, in turn calling dict.__str__(). 
It is dict.__str__() that returns the value repr(A).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With