On Thursday 11 June 2015 15:39, Devin Jeanpierre wrote: >> But I'm not talking about re-inventing what already exists. If I want >> JSON, I'll use JSON, not spend weeks or months re-writing it from >> scratch. I can't do this: >> >> class MyClass: >>pass >> >> a = MyClass() >> serialised = repr(a) >> b = ast.literal_eval(serialised) >> assert a == b > > I don't understand. You can't do that in JSON, YAML, XML, or protocol > buffers, either. They only provide a small set of types, comparable to > (but smaller) than the set of types you get from literal_eval/repr.
Well, what do people do when they want to serialise something like MyClass, but have to use (say) JSON rather than pickle? I'd write a method to export enough information (as JSON) to reconstruct the instance, and another method to take that JSON and build an instance. If I'm going to do all that, *I would use JSON* rather than try to create my own format invented from scratch using only literal_eval. Although... I suppose if I really wanted to be quick and dirty about it... py> import ast py> class MyClass(object): pass ... py> a = MyClass() py> s = repr(a.__dict__) py> b = object.__new__(MyClass) py> b.__dict__ = ast.literal_eval(s) py> b <__main__.MyClass object at 0xb725218c> ;-) -- Steve -- https://mail.python.org/mailman/listinfo/python-list