A fast and thorough lazy object proxy.
Project Links
Meta
Author: Ionel Cristian Mărieș
Requires Python: >=3.11
Classifiers
Development Status
- 5 - Production/Stable
Intended Audience
- Developers
Operating System
- Microsoft :: Windows
- POSIX
- Unix
Programming Language
- Python
- Python :: 3
- Python :: 3 :: Only
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
- Python :: 3.14
- Python :: 3.15
- Python :: Implementation :: CPython
- Python :: Implementation :: PyPy
Topic
- Utilities
docs |
|
|---|---|
tests |
|
package |
A fast and thorough lazy object proxy.
Free software: BSD 2-Clause License
Note that this is based on wrapt’s ObjectProxy with one big change: it calls a function the first time the proxy object is used, while wrapt.ObjectProxy just forwards the method calls to the target object.
In other words, you use lazy-object-proxy when you only have the object way later and you use wrapt.ObjectProxy when you want to override few methods (by subclassing) and forward everything else to the target object.
Example:
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
Installation
pip install lazy-object-proxy
You can also install the in-development version with:
pip install https://github.com/ionelmc/python-lazy-object-proxy/archive/master.zip
Documentation
Development
To run all the tests run:
tox
Acknowledgements
This project is based on some code from wrapt as you can see in the git history.
1.13.0
Oct 17, 2026
1.12.0
Aug 22, 2025
1.11.0
Apr 16, 2025
1.10.0
Dec 15, 2023
1.9.0
Jan 04, 2023
1.8.0
Oct 26, 2022
1.7.1
Dec 15, 2021
1.7.0
Dec 15, 2021
1.6.0
Mar 22, 2021
1.5.2
Nov 28, 2020
1.5.1
Jul 22, 2020
1.5.0
Jun 05, 2020
1.4.3
Oct 26, 2019
1.4.2
Aug 21, 2019
1.4.1
May 12, 2019
1.4.0
May 07, 2019
1.3.1
May 05, 2017
1.3.0
May 04, 2017
1.2.2
Apr 14, 2016
1.2.1
Aug 18, 2015
1.2.0
Jul 06, 2015
1.1.0
Jul 05, 2015
1.0.2
Apr 11, 2015
1.0.1
Dec 28, 2014
1.0.0
Dec 27, 2014
0.1.0
Dec 09, 2014
Wheel compatibility matrix
Files in release
lazy_object_proxy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl (26.1KiB)
lazy_object_proxy-1.13.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (67.2KiB)
lazy_object_proxy-1.13.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (67.5KiB)
lazy_object_proxy-1.13.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (62.6KiB)
lazy_object_proxy-1.13.0-cp311-cp311-musllinux_1_2_aarch64.whl (66.2KiB)
lazy_object_proxy-1.13.0-cp311-cp311-musllinux_1_2_riscv64.whl (62.1KiB)
lazy_object_proxy-1.13.0-cp311-cp311-musllinux_1_2_x86_64.whl (66.4KiB)
lazy_object_proxy-1.13.0-cp311-cp311-win_amd64.whl (25.1KiB)
lazy_object_proxy-1.13.0-cp311-cp311-win_arm64.whl (23.9KiB)
lazy_object_proxy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl (26.2KiB)
lazy_object_proxy-1.13.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (69.7KiB)
lazy_object_proxy-1.13.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (69.3KiB)
lazy_object_proxy-1.13.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (64.2KiB)
lazy_object_proxy-1.13.0-cp312-cp312-musllinux_1_2_aarch64.whl (67.7KiB)
lazy_object_proxy-1.13.0-cp312-cp312-musllinux_1_2_riscv64.whl (63.5KiB)
lazy_object_proxy-1.13.0-cp312-cp312-musllinux_1_2_x86_64.whl (69.0KiB)
lazy_object_proxy-1.13.0-cp312-cp312-win_amd64.whl (25.2KiB)
lazy_object_proxy-1.13.0-cp312-cp312-win_arm64.whl (23.9KiB)
lazy_object_proxy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl (26.2KiB)
lazy_object_proxy-1.13.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (69.8KiB)
lazy_object_proxy-1.13.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (69.4KiB)
lazy_object_proxy-1.13.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (64.3KiB)
lazy_object_proxy-1.13.0-cp313-cp313-musllinux_1_2_aarch64.whl (67.8KiB)
lazy_object_proxy-1.13.0-cp313-cp313-musllinux_1_2_riscv64.whl (63.6KiB)
lazy_object_proxy-1.13.0-cp313-cp313-musllinux_1_2_x86_64.whl (69.0KiB)
lazy_object_proxy-1.13.0-cp313-cp313-win_amd64.whl (25.2KiB)
lazy_object_proxy-1.13.0-cp313-cp313-win_arm64.whl (23.9KiB)
lazy_object_proxy-1.13.0-cp314-cp314-macosx_11_0_arm64.whl (26.2KiB)
lazy_object_proxy-1.13.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (69.3KiB)
lazy_object_proxy-1.13.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (69.3KiB)
lazy_object_proxy-1.13.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (64.1KiB)
lazy_object_proxy-1.13.0-cp314-cp314-musllinux_1_2_aarch64.whl (67.9KiB)
lazy_object_proxy-1.13.0-cp314-cp314-musllinux_1_2_riscv64.whl (63.5KiB)
lazy_object_proxy-1.13.0-cp314-cp314-musllinux_1_2_x86_64.whl (68.7KiB)
lazy_object_proxy-1.13.0-cp314-cp314-win_amd64.whl (25.5KiB)
lazy_object_proxy-1.13.0-cp314-cp314-win_arm64.whl (24.2KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-macosx_11_0_arm64.whl (26.9KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (78.6KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (80.9KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (72.9KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl (79.0KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-musllinux_1_2_riscv64.whl (72.4KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl (77.6KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-win_amd64.whl (26.0KiB)
lazy_object_proxy-1.13.0-cp314-cp314t-win_arm64.whl (24.7KiB)
lazy_object_proxy-1.13.0-cp315-cp315-macosx_11_0_arm64.whl (26.2KiB)
lazy_object_proxy-1.13.0-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (70.0KiB)
lazy_object_proxy-1.13.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (69.6KiB)
lazy_object_proxy-1.13.0-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (65.5KiB)
lazy_object_proxy-1.13.0-cp315-cp315-musllinux_1_2_aarch64.whl (68.2KiB)
lazy_object_proxy-1.13.0-cp315-cp315-musllinux_1_2_riscv64.whl (64.8KiB)
lazy_object_proxy-1.13.0-cp315-cp315-musllinux_1_2_x86_64.whl (69.3KiB)
lazy_object_proxy-1.13.0-cp315-cp315-win_amd64.whl (25.5KiB)
lazy_object_proxy-1.13.0-cp315-cp315-win_arm64.whl (24.2KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-macosx_11_0_arm64.whl (26.9KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (79.2KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (80.9KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (74.2KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-musllinux_1_2_aarch64.whl (78.9KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-musllinux_1_2_riscv64.whl (73.7KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-musllinux_1_2_x86_64.whl (78.1KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-win_amd64.whl (26.0KiB)
lazy_object_proxy-1.13.0-cp315-cp315t-win_arm64.whl (24.7KiB)
lazy_object_proxy-1.13.0.tar.gz (44.6KiB)
No dependencies