On 02/15/2014 11:01 AM, Serhiy Storchaka wrote:
How Enum items should be pickled, by value or by name?

I think that Enum will be used to collect system-depending constants, so the 
value of AddressFamily.AF_UNIX can be 1 on
one platform and 2 on other. If pickle enums by value, then pickled 
AddressFamily.AF_INET on on platform can be
unpickled as AddressFamily.AF_UNIX on other platform. This looks weird and 
contrary to the nature of enums.

There is one more wrinkle to pickling by name (it's actually still there in pickle by value, just more obvious in pickle by name) -- aliases. It seems to me the most common scenario to having a name represent different values on different systems is when on system A they are different, but on system B they are the same:

System A:

  class SystemEnum(Enum):
      value1 = 1
      value2 = 2

System B:

  class SystemEnum(Enum):
      value1 = 1
      value2 = 1

If you're on system B there is no way to pickle (by name or value) value2 such that we get value2 back on system A. The only way I know of to make that work would be to dispense with identity comparison, use the normal == comparison, and have aliases actually be separate objects (we could still use singletons, but it would be one per name instead of the current one per value, and it would also be an implementation detail).

Thoughts?

--
~Ethan~
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to