[Python-Dev] Path inherits from string (original) (raw)
M.-A. Lemburg mal at egenix.com
Thu Jan 26 17:51:48 CET 2006
- Previous message: [Python-Dev] Path inherits from string
- Next message: [Python-Dev] Path inherits from string
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
BJörn Lindqvist wrote:
This seems to be the only really major issue with the PEP. Everything else is negotiable, IMHO. But the string inheritance seem to be such a critical issue it deserves its own thread. I have tried to address all criticism of it here:
I don't see why this is critical for the success of the Path object. I agree with Thomas that interfaces should be made compatible to Path object.
Please note that inheritance from string will cause the C type checks of the form PyString_Check(obj) to return true. C code will then assume that it has an object which is compatible to string C API which instances aren't.
If the C code then uses the C API string macros, you get segfaults - and lot's of old code does, since there was no way to inherit from a string type at the time.
In fact, you're lucky that open() doesn't give you segfaults, since the code used to fetch the string argument does exactly that...
...
And there is absolutely nothing that can be done about that. As far as I can tell, the string inheritance is either livable with or is a showstopper. If it is the latter, then: 1. Someone has to make the required modifications to the Python core.
Right.
Plus convert a few PyString_Check()s to PyString_CheckExact()...
2. Create a Path class (or adapt the existing one so) that does not inherit from string. 3. Release it and wait a few years hoping for it to gain widespread acceptance in the Python community. 4. Make a PEP (or adapt this PEP) that gets accepted.
This scenario makes me sad because it basically means that there will never be a Path module in Python, atleast not during my lifetime. :(
Why not ? We've added Unicode support to at least some file I/O APIs - adding support for instances which support the string interface shouldn't be all that difficult :-)
BTW, if you're fine with this API:
class File: def unicode(self): return u"test.txt"
then the required change is minimal: we'd just need to use PyObject_Unicode() in getargs.c:837 and you should be set.
-- Marc-Andre Lemburg eGenix.com
Professional Python Services directly from the Source (#1, Jan 26 2006)
Python/Zope Consulting and Support ... http://www.egenix.com/ mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::
- Previous message: [Python-Dev] Path inherits from string
- Next message: [Python-Dev] Path inherits from string
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]