一个简单的装饰器,使您的类可序列化
项目描述
一个简单的装饰器,使您的类可序列化。
这是什么?
hickleable 为您的类提供了一个简单的装饰器,它几乎总是使用出色的 hickle 包将它们序列化。默认情况下,hickle 不支持自定义类——相反,它们被写入HDF5文件作为二进制数据集,使用标准的Python pickle 进行序列化。这显然抵消了hickle 的许多好处,例如,pickle序列化的数据只能用Python读取。
hickle 通过定义一些加载/卸载钩子提供了一种序列化自定义类的方法,使用HDF5格式。但是,由于它们相当通用,实现这些钩子可能有点棘手。
hickleable 提供了这些钩子的“默认实现”,应该能满足大多数自定义类的需求,并且可以作为一个简单的装饰器应用。这使得将您的类转换为支持的 数据格式 变得非常简单。
请参阅 ReadTheDocs 中的文档。
安装
只需 pip install 可序列化。可用的conda安装依赖项包括 h5py。
用法
只需
from hickleable import hickleable
@hickleable()
class MyClass:
def __init__(self, a=1, b='foo', c={'a': 'dict'}):
self.a = a
self.b = b
self.c = c
现在,MyClass 可以在不进行任何pickle的情况下进行hickle序列化
import hickle
my_obj = MyClass()
hickle.dump(my_obj, 'temporary_file.h5') # Note: no warnings about having to pickle
new_obj = hickle.load('temporary_file.h5')
一个超级酷的事情是,它尊重@cached_property 属性,并且也支持dataclasses
from dataclass import dataclass
from functools import cached_property
@hickleable()
@dataclass
class CachedClass:
foo: str
bar: int
@cached_property
def foobar(self) -> str:
print("Obtaining foobar...")
return foo*bar
c = CachedClass('baz', 50000)
foobar = c.foobar # prints "Obtaining foobar..."
foobar = c.foobar # prints nothing, since it's returning cached value.
hickle.dump(c, 'foobar.h5')
d = hickle.load('foobar.h5')
d_foobar = d.foobar # prints nothing! The value is cached in the hickle file.
需要注意的一点是,只有已经评估过的缓存属性才会被保存在hickle文件中。要强制
自定义导出/加载
虽然
@hickleable()
class Counter:
def __init__(self, a):
self.a = a
self._counts = 0
def __call__(self, b):
self._counts += 1
self.a *= b
如果我们创建一个实例并多次调用它,_counts属性将大于零。如果我们将对象保存到hickle文件并在其他地方重新加载它,它将从 _counts > 0开始。我们可以如下避免这种情况
def ignore_counts(self, state: dict):
state['_counts'] = 0
self.__dict__.update(state)
Counter.__setstate__ = ignore_counts
我们也可以从hickle文件中完全删除_counts
def remove_counts(self) -> dict:
return {k: v for k, v in self.__dict__.items() if k != '_counts'}
Counter.__gethstate__ = remove_counts
请注意,由于我们将ignore_counts设置为__setstate__方法,它将被
项目详情
hickleable-0.2.4.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | df56a012816a5a9602fe0a08e483c27cfe04c85725bc99fe2614a6e9d14b77a7 |
|
| MD5 | baab41927585c440da398621764e3ad8 |
|
| BLAKE2b-256 | fce16f8423b700cda5f25f40acab71e9ec0dfd592418dc733e490fc9cb65578e |
hickleable-0.2.4-py2.py3-none-any.whl的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 503501714f96586c94173a89b127cc0fdead3f79b0889c8628e562224db667f6 |
|
| MD5 | d9246b3e9ed4041bb4cea201311a914b |
|
| BLAKE2b-256 | 4767a72cfbcbafdc878856560edc5dbc10b67a4e57bd05ade428616ed9099245 |