[Python-ideas] Serializable method

Steven D'Aprano steve at pearwood.info
Sat Mar 10 00:22:57 CET 2012


On Fri, Mar 09, 2012 at 05:05:51PM +0000, Jakob Bowyer wrote:

> I think that object should provide an __serializable__ method which in-turn
> allows the user to define in it how the object is to be serialized, 

I don't think this is a sensible approach. In general, you don't 
serialise a single object, you serialise a bunch of them. Suppose you 
serialise three objects spam, ham, and eggs to a single file. 
Unfortunately, spam uses pickle, ham uses JSON, and eggs uses plist. How 
would you read the data back later? How do you know which de-serialiser 
you should use for each object? What happens if you end up with 
ambiguous content?

You would need some sort of meta-serialiser, that not just recorded each 
serialised string, but also the format of that string.

I don't think that it is helpful to ask objects to serialise themselves, 
giving them the choice of what serialisation scheme to use. While 
freedom of choice is good, it should be the *caller* who chooses the 
scheme, not the individual objects.

So at the very least, for this idea to have legs, you would have to 
mandate a serialisation scheme which well-behaved objects ought to 
support. But Python already has that: pickle. If you want to mandate a 
second scheme, to overcome the known deficiencies of pickle, that's a 
separate issue.


> the
> default operation should be something along the lines of  return
> self.__dict__ but that is just semantics. 

Returning __dict__ can't work, because not all objects have a 
self.__dict__, and for those that do, it is not a string but a dict.

[Aside: I don't understand why people say "that is just semantics" to 
dismiss something as trivial. Semantics is the *meaning* of something. 
It is the most fundamental, critical property of language. Without 
semantics, if I say "I got in the car and drove to work" you would not 
know if I actually got in the car and drove to work, or stayed home to 
watch television.]



-- 
Steven



More information about the Python-ideas mailing list