跳转到主要内容

快速且全面的懒对象代理。

项目描述

快速且全面的懒对象代理。

  • 免费软件: BSD 2-Clause License

请注意,这是基于 wrapt 的 ObjectProxy,有一个重大变化:它在首次使用代理对象时调用一个函数,而 wrapt.ObjectProxy 只是转发方法调用到目标对象。

换句话说,当您稍后才有对象时,您使用 lazy-object-proxy,而您想要通过子类化覆盖少量方法并将所有其他内容转发到目标对象时,您使用 wrapt.ObjectProxy

示例

import lazy_object_proxy

def expensive_func():
    from time import sleep
    print('starting calculation')
    # just as example for a very slow computation
    sleep(2)
    print('finished calculation')
    # return the result of the calculation
    return 10

obj = lazy_object_proxy.Proxy(expensive_func)
# function is called only when object is actually used
print(obj)  # now expensive_func is called

print(obj)  # the result without calling the expensive_func

安装

pip install lazy-object-proxy

文档

https://python-lazy-object-proxy.readthedocs.io/

开发

要运行所有测试,请执行

tox

致谢

该项目基于来自 wrapt 的某些代码,如git历史所示。

变更日志

1.10.0 (2023-12-15)

  • 添加了Python 3.12的轮子。

  • 不再支持Python 3.7。

  • 使用ruff对代码库进行了一些重新格式化和lint修复(主要是更多的Python 2遗留清理)。

1.9.0 (2023-01-04)

  • 增加了对矩阵乘法运算符(@)的支持。

  • 现在应该拥有所有的轮子了(包括许多linux的轮子)。

  • 提高了setuptools和setuptools-scm的最低版本要求。

  • 将默认的纯Python回退实现切换到“简单”实现(当你 from lazy_object_proxy import Proxy 且C扩展不可用时)。之前使用的是“slots”实现,但事实证明它在Python 3上较慢。

1.8.0 (2022-10-26)

  • 清理了cPickle的使用。由Sandro Tosi在#62中贡献。

  • 清理了更多的死Python 2代码。

  • 增加了Python 3.11的wheel。

  • 放弃了对Python 3.6的支持。

1.7.1 (2021-12-15)

  • 移除了大部分Python 2支持代码,并修复了 python_requires 以要求至少Python 3.6。

    注意,1.7.0已被撤回,因为它无法在Python 2.7上安装。现在在Python 2.7上安装lazy-object-proxy应自动回退到1.6.0版本。

1.7.0 (2021-12-15)

  • 将CI切换到GitHub Actions,这有几个后果

    • 放弃了Python 2.7的支持。你仍然可以安装它,但不再进行测试,并且将在某个时候移除Python 2特定处理。

    • Linux wheel现在提供在 musllinuxmanylinux2014 变体中。

  • 修复了 __index__,使其回退到 int,如果包装对象没有 __index__ 方法。这防止了在代码使用代理时,如果没有 __index__ 方法,代码很可能只调用 int 的情况。

1.6.0 (2021-03-22)

  • 增加了对异步特殊方法(__aiter____anext____await____aenter____aexit__)的支持。这些在 async forawaitasync with 语句中使用。

    注意,__await__返回一个包装器,它试图模拟ceval循环中发生的疯狂事情,因此会有一定的性能开销。

  • 增加了 __resolved__ 属性。你可以用它来检查工厂是否已被调用。

1.5.2 (2020-11-26)

  • 增加了Python 3.9的wheel。

  • 移除了Python 2.7 Windows wheel(在Python 3.9的最新映像上不受支持)。

1.5.1 (2020-07-22)

  • 增加了ARM64 wheel(manylinux2014)。

1.5.0 (2020-06-05)

  • 增加了对 __fspath__ 的支持。

  • 放弃了Python 3.4的支持。

1.4.3 (2019-10-26)

  • 为Python 3.8增加了二进制wheel。

  • 修复了许可证元数据。

1.4.2 (2019-08-22)

  • 包含了一个 pyproject.toml,允许用户使用旧的python/setuptools安装sdist,因为setuptools-scm依赖项将由pip而不是setuptools获取。修复了 #30

1.4.1 (2019-05-10)

  • 修复了使用 -coverage cflags构建的wheel。不再有关于伪造的 cext.gcda 文件的问题。

  • 从wheel中移除了无用的C文件。

  • setup.py 更改为使用setuptools-scm。

1.4.0 (2019-05-05)

  • 修复了slots后端的 __mod__。由Ran Benita在#28中贡献。

  • 放弃了Python 2.6和3.3的支持。由“hugovk”在#24中贡献。

1.3.1 (2017-05-05)

  • 修复了损坏的发布(sdist 有损坏的 MANIFEST.in)。

1.3.0 (2017-05-02)

  • 加快涉及 cext.Proxy 子类的算术操作。

1.2.2 (2016-04-14)

  • 增加了 manylinux wheel。

  • 在readme中进行了轻微的清理。

1.2.1 (2015-08-18)

  • 修复内存泄漏(包装的对象会得到无效引用)。由 Astrum Kuo 贡献,详情请见 #10

1.2.0 (2015-07-06)

  • 当调用 __repr__ 时不要实例化对象。这有助于调试(允许用户看到代理的确切状态)。

1.1.0 (2015-07-05)

  • 增加了对序列化的支持。序列化的值将是包装对象,不包括任何代理容器。

  • 修复了 C 扩展中的内存管理问题(由于 C 扩展中的处理不当,引用循环没有被垃圾回收)。由 Alvin Chow 贡献,详情请见 #8

1.0.2 (2015-04-11)

  • PyPI 上的首次发布。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

lazy-object-proxy-1.10.0.tar.gz (43.3 kB 查看哈希值)

上传时间 源代码

构建的发行版

lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl (27.5 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

lazy_object_proxy-1.10.0-cp312-cp312-win32.whl (25.9 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86

lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl (75.5 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ x86-64

lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl (75.4 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ ARM64

lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (72.4 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (72.4 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl (27.6 kB 查看哈希值)

上传时间 CPython 3.12 macOS 10.9+ x86-64

lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl (27.6 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

lazy_object_proxy-1.10.0-cp311-cp311-win32.whl (25.8 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86

lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl (73.2 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ x86-64

lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl (73.7 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ ARM64

lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (70.7 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ARM64

lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (69.8 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl (27.4 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl (27.6 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

lazy_object_proxy-1.10.0-cp310-cp310-win32.whl (25.8 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86

lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl (70.5 kB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.1+ x86-64

lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl (70.9 kB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.1+ ARM64

lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (69.1 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ ARM64

lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (68.3 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl (27.4 kB 查看哈希值)

上传时间 CPython 3.10 macOS 10.9+ x86-64

lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl (27.5 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

lazy_object_proxy-1.10.0-cp39-cp39-win32.whl (25.8 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86

lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl (68.9 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.1+ x86-64

lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl (68.6 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.1+ ARM64

lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (67.5 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ ARM64

lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (67.1 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl (27.4 kB 查看哈希值)

上传时间 CPython 3.9 macOS 10.9+ x86-64

lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl (27.5 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

lazy_object_proxy-1.10.0-cp38-cp38-win32.whl (25.8 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86

lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl (70.1 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.1+ x86-64

lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl (69.7 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.1+ ARM64

lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (66.3 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ ARM64

lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (66.4 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl (27.4 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

支持者