Mike Krell wrote: > Peter Otten <[EMAIL PROTECTED]> wrote in > news:[EMAIL PROTECTED]: > >> I get >> >> np: "overridden __str__: c:/mbk/test" >> str(np): "overridden __str__: c:/mbk/test" >> overridden __str__: overridden __str__: c:/mbk/test/appendtest > > Hmmm. I guess you're not running under windows, since normpath() > converts / to \ on windows. I wonder if that's part of the problem. > > >> Are you using the latest version of the path module? > > My path.py says it's 2.1, which is the latest according to the site. > > Older versions >> implied a Path() call in the __div__() operator which would explain at >> least the output you get for >> >> print np / 'appendtest' > > You've lost me here. What do you mean about "implied a Path() call"? > Here is the definition of __div__ from path.py: > > ''' > # The / operator joins paths. > def __div__(self, rel): > """ fp.__div__(rel) == fp / rel == fp.joinpath(rel) > > Join two path components, adding a separator character if > needed. > """ > return self.__class__(os.path.join(self, rel)) > '''
>From http://www.jorendorff.com/articles/python/path/changes.html: """ This page describes recent changes to the Python path module. 2.1 [...] Better support for subclassing path. All methods that returned path objects now respect subclassing. Before: type(PathSubclass(s).parent) is path Now: type(PathSubclass(s).parent) is PathSubclass """ So my assumption was that you are using a pre-2.1 version of path. I suggest that you double-check that by inserting a print path.__version__ into the code showing the odd behaviour before you start looking for more exotic causes. > I still don't understand the TypeError in the delegation case. For newstyle classes a = A() a / 42 # or any other operation implemented via __xxx__() (unlike a.__div__) will only look into the class for a __div__() special method and ignore methods defined in the instance or via the __getattr__() mechanism. For delegation to work you need (untested) class NormPath(object): def __div__(self, other): return self.__class__(self._path / other) # ... Peter -- http://mail.python.org/mailman/listinfo/python-list