Issue pickling datetime.time subclass
I've run across an issue pickling datetime.time
subclasses:
import datetime
import pickle
class TimeFoo(datetime.time): pass
class DateFoo(datetime.date): pass
if __name__ == "__main__":
t = DateFoo(2001, 2, 3)
d = pickle.dumps(t) # OK
print(d)
# b'\x80\x03c__main__\nDateFoo\nq\x00C\x04\x07\xd1\x02\x03q\x01\x85q\x02Rq\x03.'
t = pickle.loads(d)
t = TimeFoo(1, 2, 3)
d = pickle.dumps(t) # :(
print(d)
# b'\x80\x03cdatetime\ntime\nq\x00C\x06\x01\x02\x03\x00\x00\x00q\x01\x85q\x02Rq\x03.'
t = pickle.loads(d)
The class info in the pickle dump should be __main__\nTimeFoo
. Issue arises because datetime.time.__reduce_ex__()
returns (time, ...)
rather than (self.__class__, ...)
on (I assume) this line.