[英]How to pickle a class instance's variables selectively?
我有一個類實例:
class A:
def __init__(self,shape):
self.shape = shape
self.matrix = numpy.zeros(shape)
我對self.matrix
做了一些乘法。 當我腌制A
類的實例時,由於某種原因,我不想腌制self.matrix
。
目前,我的解決方案是在腌制之前將self.matrix = None
設置為self.matrix = None
,並在從腌制文件中加載self.matrix
重置zeros(shape)
。
有沒有更優雅的解決方案? 就像Java中的transient
關鍵字一樣。
使用鈎子方法可以限制腌制和未腌制的物質。
在這里,您可以使用__getstate__
和相應的__setstate__
方法:
class A:
def __init__(self, shape):
self.shape = shape
self.matrix = numpy.zeros(shape)
def __getstate__(self):
return (self.shape,)
def __setstate__(self, state):
self.shape, = state
self.matrix = numpy.zeros(self.shape)
可以將__setstate__
簡化為:
def __setstate__(self, state):
self.__init__(*state)
如果您的__init__
以這種方式可重復使用。 在這種情況下,您也可以使用__getinitargs__
代替__getstate__
並將__setstate__
:
class A:
def __init__(self, shape):
self.shape = shape
self.matrix = numpy.zeros(shape)
def __getinitargs__(self):
return (self.shape,)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.