Python上元组派生类的自定义酸洗
我有一个类Python上元组派生类的自定义酸洗,python,python-3.x,pickle,Python,Python 3.x,Pickle,我有一个类记录,它通过主键ID引用数据库记录,并保留一些缓存信息 class Record: def __init__( self, id ): self.id = id self.various_cached_info = spam 我还有一个类RecordCollection,它是记录的元组 from typing import Tuple, TypeVar TRecord = TypeVar( "T
记录
,它通过主键ID引用数据库记录,并保留一些缓存信息
class Record:
def __init__( self, id ):
self.id = id
self.various_cached_info = spam
我还有一个类RecordCollection
,它是记录的元组
from typing import Tuple, TypeVar
TRecord = TypeVar( "TRecord", bound = Record )
class RecordCollection( Tuple[TRecord, ...] ):
pass
现在,当我pickle一个RecordCollection
时,如何将这个类更改为只pickle id(作为int的列表
)
我试过:
- 更改
Record.\uuuu getstate\uuuu
以仅包含ID,并放弃缓存的信息。这会有所帮助,但是RecordCollection
仍然会为数组中的每个项pickle类型名称“Record
”
- 更改
RecordCollection.\uuuu getstate\uuuu
以仅包括ID列表,但引擎盖后面的某些东西正在其他地方腐蚀元组
您可以对int的tupletuple(i.id表示l中的i)使用tuple理解,也可以对int的列表[i.id表示l中的i]
使用列表理解。这两种方法都不需要您以任何方式更改类。如果您真的想将其添加到类中,您可以创建一个名为ids(self)
的方法,并让它返回ID。所以您的类看起来像classrecordcollection(Tuple[TRecord,…]):;def id(self):;返回元组(在self中i的i.id)
,然后像调用l.id()
一样调用它。
import json
import jsonpickle
a = Record( 1 )
b = Record( 2 )
c = Record( 3 )
l = RecordCollection( (a, b, c) )
print( json.dumps( json.loads( jsonpickle.dumps( l ) ), indent = 4 ) )