一个简单的装饰器,使您的类可序列化
项目描述
一个简单的装饰器,使您的类可序列化。
这是什么?
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 |