Dean <sca...@gmail.com> added the comment:
Code demonstrating the issue; the CTimeFoo class is pickled correctly, but TimeFoo isn't. import builtins from _datetime import time as ctime original_importer = builtins.__import__ def my_importer(name, globals, locals, fromlist, level): if name == '_datetime': raise ImportError return original_importer(name, globals, locals, fromlist, level) builtins.__import__ = my_importer import datetime builtins.__import__ = original_importer import pickle class CTimeFoo(ctime): pass 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\x04\x95#\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x07DateFoo\x94\x93\x94C\x04\x07\xd1\x02\x03\x94\x85\x94R\x94.' t = pickle.loads(d) t = CTimeFoo(1, 2, 3) d = pickle.dumps(t) # OK print(d) # b'\x80\x04\x95&\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x08CTimeFoo\x94\x93\x94C\x06\x01\x02\x03\x00\x00\x00\x94\x85\x94R\x94.' t = pickle.loads(d) t = TimeFoo(1, 2, 3) d = pickle.dumps(t) # :( print(d) # b'\x80\x04\x95"\x00\x00\x00\x00\x00\x00\x00\x8c\x08datetime\x94\x8c\x04time\x94\x93\x94C\x06\x01\x02\x03\x00\x00\x00\x94\x85\x94R\x94.' t = pickle.loads(d) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue41966> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com