Lazy attributes to delay initialization
Project description
Lazy
lazyfields has utilities to allow for lazily defined attributes so that you can avoid some patterns like the one below or avoid calculating a property twice.
class MyClass:
def __init__(self):
self._val = None
def get_val(self):
if val is None:
self._do_something()
return self._val
lazyfield
The lazyfields.lazyfield descriptor streamlines the process of implementing lazy attributes. Here's how you can use it:
from lazyfields import lazyfield
class MyClass:
@lazyfield
def expensive_value(self):
return do_expensive_operation()
instance = MyClass()
instance.expensive_value # Does the expensive operation, saves the result and returns the value
instance.expensive_value # Returns directly the cached value
del instance.expensive_value # Cleans the cache
instance.expensive_value # redo the expensive operation
instance.expensive_value = "Other" # Overwrites the cached value with the value assigned
lazyfieldsaves the value directly in the class as a hidden attribute so you don't have to worry about garbage collection or weakrefs
asynclazyfield
The lazyfields.asynclazyfield descriptor tackles the same issue as lazyfield, but while preserving the asynchronous API
from lazyfields import asynclazyfield
class MyClass:
@asynclazyfield
async def expensive_value(self):
return await do_expensive_operation()
instance = MyClass()
await instance.expensive_value() # you still call it as a function, but it will do the same thing, call the function, store the result and return the value
await instance.expensive_value() # now it only returns the value
dellazy(instance, "expensive_value") # clear the stored value
await instance.expensive_value() # here the calculation is done again
setlazy(instance, "expensive_value", "Other") # overwrite the stored value with "Other"
Helpers
lazyfields provides helpers to work with frozen classes or when using the asynclazyfield and need to set or reset the field manually
setlazy(instance: Any, attribute: str, value: Any, bypass_setattr: bool = False)setlazy allows you to directly change the hidden attribute behind any lazy field, and the bypass_setattr parameter will instead of using thesetattrfunction, useobject.__setattr__.dellazy(instance: Any, attribute: str, bypass_delattr: bool = False)dellazy allows you to clear the value stored in the hidden attribute to allow for recalculation. Similar to setlazy the bypass_delattr parameter will useobject.__delattr__instead ofdelattrforce_set(instance: Any, attribute: str, value: Any)force_set is just a shortcut for setlazy(..., bypass_setattr=True)force_del(instance: Any, attribute: str)force_del is just a shortcut for dellazy(..., bypass_delattr=True)is_initialized(instance: Any, attribute: str)Returns whether the lazyfield has stored a value yet, without triggering the routine inadvertently.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lazy_fields-1.1.2.tar.gz.
File metadata
- Download URL: lazy_fields-1.1.2.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.8 Linux/6.12.6-100.fc40.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a3ab320ac218ba52a627ed80e7bf0c72ba49ba3b785c4bb952609630d7c2d3f
|
|
| MD5 |
fc20b170c0260dadf3495da27a0a54d0
|
|
| BLAKE2b-256 |
af30dce61f498cd4832d2ed7691d1318cf6dc45fb2d08a6fe3599b188f37259e
|
File details
Details for the file lazy_fields-1.1.2-py3-none-any.whl.
File metadata
- Download URL: lazy_fields-1.1.2-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.8 Linux/6.12.6-100.fc40.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b8ed38780ad646b137600b158223e4e421e577cfe74199d42817d00ac7ef25c
|
|
| MD5 |
231718dba8b49cef7b27deea38e6658d
|
|
| BLAKE2b-256 |
7cc705837a23e68241874a1f610dcd0a230e66adc555b19d5e1dd2e8902ca113
|