Edward C. Jones wrote: > #! /usr/bin/env python > > class A(list): > def __init__(self, alist, n): > list.__init__(self, alist) > self.n = n > > def __str__(self): > return 'AS(%s, %i)' % (list.__str__(self), self.n) > > def __repr__(self): > return 'AR(%s, %i)' % (list.__repr__(self), self.n) > > a = A(['x', 'y'], 7) > > print 1, a > print 2, repr(a) > print 3, list.__str__(a) > print 4, list.__repr__(a) > > """ > The output is: > > 1 AS(AR(['x', 'y'], 7), 7) > 2 AR(['x', 'y'], 7) > 3 AR(['x', 'y'], 7) > 4 ['x', 'y'] > > Why is list.__str__(a) == "AR(['x', 'y'], 7)"?
Because it's coded like this: def __str__(self): return repr(self) That implies str(x) == repr(x), since you don't want that, don't call list.__str__ > > Note: The problem goes away if "list.__str__(a)" is replaced with > "list.__repr__(self)". > """ That's right. You *cannot* call list.__str__ because it contradicts design of class A -- http://mail.python.org/mailman/listinfo/python-list