En Mon, 08 Dec 2008 12:34:03 -0200, Cong Ma <[EMAIL PROTECTED]> escribió:
I'm writing a program that pickles an instance of a custom subclass of
datetime.tzinfo. I followed the guides given in the Library Reference
(version
2.5.2, chapter 5.1.6), which contain the note:
"Special requirement for pickling: A tzinfo subclass must have an
__init__
method that can be called with no arguments, else it can be pickled but
possibly
not unpickled again. This is a technical requirement that may be relaxed
in the
future."
I tried this with an example "FixedOffset" subclass instance given in the
Example section in the manual. It indeed failed to unpickle. To work
around
this, I found two possible solutions:
1. Modify the __init__ method so that it takes optional arguments with
default
values;
Doing that still works with 2.6 and 3.0
2. Implement the __getinitargs__ method so that it does the opposite of
__init__: returning a tuple from the instance's internal state that can
be used
to re-initialize an instance, retaining the old value.
In fact, it doesn't matter *what* it returns, as far as they're valid
arguments to __init__
My questions:
1. Is the "technical limitation" fixed in version 2.6 or 3.0? I can't
check it
for myself now... Python.org seems down and I can't find the docs.
No, they behave the same (odd) way.
2. To stick with version 2.5, which of the above 2 methods is better?
Both seems
to unpickle to the correct result, but are there subtle side-effects?
Or there
are better solutions?
I'd use method 1, just because the __getinitargs__ are useless.
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list