On 07/05/13 23:34, Eli Bendersky wrote:
One of the contended issues with PEP 435 on which Guido pronounced was the
functional API, that allows created enumerations dynamically in a manner
similar to namedtuple:
Color = Enum('Color', 'red blue green')
The biggest complaint reported against this API is interaction with pickle.
As promised, I want to discuss here how we're going to address this concern.
Does this issue really need to be solved before 435 is accepted? As the Zen
says:
Now is better than never.
Although never is often better than *right* now.
Solving the pickle issue is a hard problem, but not a critical issue.
namedtuple has had the same issue since its inception, only worse because there
is no class syntax for namedtuple. This has not been a barrier to the success
of namedtuple.
Or rather, the issue is not with Enum, or namedtuple, but pickle. Any
dynamically-created type will have this issue:
import pickle
def example(name):
... return type(name, (object,), {})
...
instance = example("Foo")()
pickle.dumps(instance)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
_pickle.PicklingError: Can't pickle <class '__main__.Foo'>: attribute lookup
__main__.Foo failed
I don't think it is unreasonable to chalk it up to a limitation of pickle, and
say that unless you can meet certain conditions, you won't be able to pickle
your instance.
Either way, approval of PEP 435 should not be dependent on fixing the pickle
issue.
--
Steven
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com