수업을 인스턴스화하는 동안 picklable이 아닌 일부 필드를 초기화합니다. 따라서, 내 수업을 올바르게 (피) 수있게하려면 내 초기화 메서드는 unpickling에 대한 호출 할 싶습니다. 이것은 이전 스타일의 클래스에서 작동하는 것처럼 보입니다.kwargs로 새로운 스타일을 삐걱 거리지 않는 것은 불가능합니까?
새로운 스타일 수업에서는 __new__
및 __getnewargs__
을 사용해야합니다. 여기에 내가 무엇을 :하지 않을 경우
import cPickle
class Blubb(object):
def __init__(self, value):
self.value = value
class Bla(Blubb):
def __new__(cls, value):
instance = super(Bla, cls).__new__(cls)
instance.__init__(value)
return instance
def __getnewargs__(self):
return self.value,
def __getstate__(self):
return {}
def __setstate__(self, dct):
pass
x = Bla(2)
print x.value
pickled = cPickle.dumps(x, 2)
x_ = cPickle.loads(pickled)
assert x_.value == 2
이 사실이 obj = C.__new__(C, *args)
를 들어, 잘 될 것입니다. 현재 **kwargs
이 있습니다. 따라서 __new__
및 __init__
개의 메소드에서 키워드가 아닌 인수로 제한됩니다.
누구든지 해결 방법을 알고 있습니까? 이것은 정말로 불편합니다.