跳转到主要内容

Python对象的延迟属性

项目描述

包内容

@lazy

用于创建延迟属性的装饰器。

概述

延迟属性是计算属性,它们仅在首次使用时进行评估。随后的使用将返回第一次调用的结果。当代码应该在需要之前

  • 延迟 运行,即

  • 一次 运行,即在其对象的生命周期中不会两次运行时,它们非常有用。

你可以将其视为 延迟初始化。可能性是无限的。

类型

装饰器完全支持类型。类型检查器可以从装饰方法的返回值推断出延迟属性的类型。

示例

下面的类创建其 store 资源时延迟

from lazy import lazy

class FileUploadTmpStore(object):

    @lazy
    def store(self):
        location = settings.get('fs.filestore')
        return FileSystemStore(location)

    def put(self, uid, fp):
        self.store.put(uid, fp)
        fp.seek(0)

    def get(self, uid, default=None):
        return self.store.get(uid, default)

    def close(self):
        if 'store' in self.__dict__:
            self.store.close()

另一个应用领域是缓存

class PersonView(View):

    @lazy
    def person_id(self):
        return self.request.get('person_id', -1)

    @lazy
    def person_data(self):
        return self.session.query(Person).get(self.person_id)

文档

有关更多详细信息,请参阅API文档

变更日志

1.6 - 2023-09-14

  • 实现 lazy.__set_name__(),这有助于处理类似于 foo=lazy(_foo) 的情况。[stefan]

  • 更新tox.ini以使用最新版本的tox。[stefan]

  • 添加GitHub CI工作流。[stefan]

  • 添加 .readthedocs.yaml 文件。[stefan]

  • 在文档extra中锁定sphinx和sphinx-rtd-theme版本。[stefan]

  • 添加mypy extra,该extra安装mypy。[stefan]

  • 修复关键字中的散乱字符。[stefan]

1.5 - 2022-09-18

  • 允许类型检查器推断懒属性的类型。感谢Elias Keis和Palpatineli的贡献。[elKei24] [Palpatineli]

  • 在tox.ini中添加Python 3.8-3.11,删除旧版本Python。[stefan]

  • 在tox.ini中替换已弃用的python setup.py test。[stefan]

  • 从setup.py中删除已弃用的test_suite。[stefan]

  • 将元数据移动到setup.cfg并添加pyproject.toml文件。[stefan]

  • 在sdist中包含测试但不包含wheel。[stefan]

1.4 - 2019-01-28

  • 添加MANIFEST.in。[stefan]

  • 以通用wheel的形式发布。[stefan]

1.3 - 2017-02-05

  • 支持Python 2.6-3.6,无需2to3。[stefan]

  • 添加LICENSE文件。[stefan]

1.2 - 2014-04-19

  • 由于它不是setuptools,从install_requires中删除setuptools。[stefan]

1.1 - 2012-10-12

  • 正确使用functools.wraps();Python 3的每个版本都会改变属性列表。[stefan]

1.0 - 2011-03-24

  • 初始发布。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

lazy-1.6.tar.gz (10.6 kB 查看哈希)

上传时间

构建分发

lazy-1.6-py2.py3-none-any.whl (5.2 kB 查看哈希)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面