I'm running into problems trying to override __str__ on the path class
from Jason Orendorff's path module
(http://www.jorendorff.com/articles/p...h/src/path.py).
My first attempt to do this was as follows:
'''
class NormPath(path):
def __str__(self):
return 'overridden __str__: ' + path.__str__(self.normpath())
'''
The problem is that the override is not invoked unless str() is called
explictly, as indicated by the test program and its output below:
'''
from normpath import NormPath
np = NormPath('c:/mbk/test')
print 'np: "%s"' % np
print 'str(np): "%s"' % str(np)
print np / 'appendtest'
np: "c:/mbk/test"
str(np): "overridden __str__: c:\mbk\test"
c:/mbk/test\appendtest
'''
I suspect that the problem has to do with the base class of the path
class being unicode because it works when I create dummy classes derived
off of object.
My next attempt was to try delegation as follows:
'''
class NormPath(object):
def __init__(self, *a, **k):
self._path = path(*a, **k)
def __str__(self):
return 'overridden __str__: ' + str(self._path.normpath())
def __getattr__(self, attr):
print 'delegating %s...' % attr
return getattr(self._path, attr)
'''
In this case the test program blows up with a TypeError when trying to
invoke the / operator:
'''
np: "overridden __str__: c:\mbk\test"
str(np): "overridden __str__: c:\mbk\test"
-------------------------------------------------------------------------
exceptions.TypeError Traceback (most
recent call last)
e:\projects\Python\vc\nptest.py
1 from normpath import NormPath
2 np=NormPath('c:/mbk/test')
3 print 'np: "%s"' % np
4 print 'str(np): "%s"' % str(np)
----5 print np / 'appendtest'
TypeError: unsupported operand type(s) for /: 'NormPath' and 'str'
WARNING: Failure executing file: <nptest.py>
'''
Can someone explain these failures to me? Also, assuming I don't want to
modify path.py itself, is there any way to do what I'm trying to
accomplish? BTW, I'm running 2.4.2 under Windows.
Thanks in advance,
Mike