[Python-3000] [Python-Dev] inst_persistent_id
jim at zope.com
Sun Feb 3 22:27:56 CET 2008
On Jan 24, 2008, at 9:25 PM, Alexandre Vassalotti wrote:
> On Jan 24, 2008 9:47 AM, Jim Fulton <jim at zope.com> wrote:
>> On Jan 23, 2008, at 4:30 PM, Alexandre Vassalotti wrote:
>>> I am not sure what you mean by "cPickle.Pickler and
>>> subclassible in the same way as the pickle classes." It is
>>> possible to
>>> subclass the C implementation. However, the C implementation does
>>> expose pickle "private" methods, such as Pickler.save_int and
>>> Unpickler.load_tuple. This is fine because these were never
>>> as part of the interface of pickle.
>> That doesn't mean that they aren't overridden. I've overridden them
>> in specialized applications. I suspect that others have as well.
> Well even in pickle.py, you can't override the save_* and load_*
> methods (at least, directly), since they are called via a dispatch
You have to override the dictionary too. :)
>> I'm not really looking for anything that isn't there already. The
>> python pickle version is more extensible that cPickle and I find that
>> valuable. I don't want to make cPickle more flexible. I'd willing
>> trade off speed and flexibility depending on the application. I
>> want to lose either in the interest of unification.
> How much of cPickle is really speed critical?
cPickle is all about speed.
> Personally, I think
> built-in types pickling should be optimized as much as possible and
> other things, such as user-defined classes and extension types
> pickling, could be done in Python.
The whole reduce dance should be in C, after all, it already is.
Most user-defined types inherit the reduce method(s) provided by
object, which is already written in C.
>> Having said that, I would agree that there are certain aspects of
>> their external APIs that ought to be unified. A good example is
>> handling of globals.
> Could you elaborate about this, please; how the handling of globals by
> cPickle is different from pickle?
pickle.Unpickler has a find_class method that loads globals. This can
be overridden in a subclass to provide alternate behavior.
cPickle.Unpickler has a find_global attribute that can be assigned to
provide alternate behavior. (Internally, a find_class C member is used
for hysterical reasons. :)
More information about the Python-3000