3
私のクラスのdatetimeオブジェクトにはtzinfoクラスが必要です。私は自分のクラスをピクルする必要があります。しかし、pickle.loads(obj)は失敗しました。 mytzクラスの何が問題になっていますか?私がmyzzクラスを使用しない場合、すべてが機能します。どうして?ここPython:クラスインスタンスのpickle.loadsが失敗しました
from datetime import datetime, tzinfo, timedelta
# Timezone class
class mytz (tzinfo):
def __init__(self, offset, dst):
self._tzname = offset + ' ' + dst
self._offset = timedelta(hours=int(offset[0:3]), minutes=int(offset[0:1]+offset[3:]))
self._dst = timedelta(hours=int(dst[0:3]), minutes=int(dst[0:1]+dst[3:]))
def utcoffset(self, dt):
return self._offset + self.dst(dt)
def tzname(self, dt):
return self._tzname
def dst(self, dt):
return self._dst
# Root class
class A:
def __init__(self, val):
self.val = val
self.val2 = mytz(val, val)
def __str__(self):
return 'response'+str(self.val)
# Sample code
a = A('+0100')
import pickle
apickled = pickle.dumps(a)
print (a)
print (a.val2)
b = pickle.loads(apickled)
print (b)
print(b.val2)
が出力されます。
response+0100
<__main__.mytz object at 0x7fe2873b5748>
Traceback (most recent call last):
File "/home/maksim/Projects/amodule/ttt.py", line 32, in <module>
b = pickle.loads(apickled)
TypeError: __init__() missing 2 required positional arguments: 'offset' and 'dst'