Problems trying to override __str__ on path class
Peter Otten
__peter__ at web.de
Mon Oct 23 10:31:32 EDT 2006
Mike Krell wrote:
> Alas, the print statement says "2.1". So there's a definite platform /
> environment difference here, but that isn't it.
It turns out the observed difference is only indirectly triggered by the
differing platforms. On my machine the path baseclass is str. If I change
it to unicode (by patching path.py), I get the same output that you had.
The problem can be reduced to
>>> class A(str):
... def __str__(self): return "yadda"
...
>>> "%s" % A(), str(A())
('yadda', 'yadda')
>>> class B(unicode):
... def __str__(self): return "yadda"
...
>>> "%s" % B(), str(B())
(u'', 'yadda')
So Python itself doesn't honor an overridden __str__() method for the "%s"
format. Implementing __unicode__() doesn't help, either:
>>> class C(unicode):
... def __unicode__(self): return u"YADDA"
... def __str__(self): return "yadda"
...
>>> "%s" % C(), unicode(C())
(u'', u'')
Somewhere there is an isinstance() test where there should be a test for the
exact class. Seems like a bug to me.
Peter
More information about the Python-list
mailing list