Easy object wrapping in Python.
Project description
objwrap
Easy object wrapping in Python.
This package enables creation of transparent objects that wrap
others already in memory. Basically, it offers a more sophisticated
view over getattr that hand-rewires object methods, including
magic methods (__add__, __len__ etc).
Quickstart
First install the latest version of the package
with pip install --upgrade objwrap.
Custom classes to wrap attribute getters and magic methods.
from objwrap import Wrapper
class Notify(Wrapper):
def __wrapattr__(self, obj, name):
print(f"Accessing {name}")
return super().__wrapattr__(obj, name)
x = Notify(1)
print(x+1)
# Accessing __add__
# 2
Wrappers to transform inputs to method calls.
from objwrap import ClosedWrapper, wrapped
class Notify(ClosedWrapper):
def __after__(self, obj):
return Notify(obj) # this is the default behavior
def __before__(self, method, args, kwargs):
method, args, kwargs = super().__before__(method, args, kwargs)
print(f"Calling {method.__name__} on {wrapped(self)} with args {args} and kwargs {kwargs}")
return method, args, kwargs
x = Notify(1)
y = Notify(2)
z = x + y # a Notify object
print(wrapped(z))
# Calling __add__ on 2 with args [2] and kwargs {}
# 3
Wrappers around dicts that call methods for their values.
from objwrap import ClosedWrapper, wrapped
from objwrap.closure import Pending
class RunOnValues(ClosedWrapper):
def __init__(self, obj):
super().__init__(obj)
self.symbols = obj.keys()
def __unknown__(self, obj, name, args, kwargs):
_, args, kwargs = super().__before__(None, args, kwargs) # convert other instances of RunOnValues to dicts
assert isinstance(obj, dict) # enforce the type
pending = dict()
for symbol in self.symbols:
pending[symbol] = Pending(method=getattr(obj[symbol], name),
args=[arg[symbol] for arg in args],
kwargs={k: arg[symbol] for k, arg in kwargs.items()})
return pending
x = RunOnValues({"a": 1, "b": 2})
y = RunOnValues({"a": 10, "b": 20})
z = x + y
print(wrapped(z))
# {'a': 11, 'b': 22}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 objwrap-0.0.2-py3-none-any.whl.
File metadata
- Download URL: objwrap-0.0.2-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbd324b9d60650061de83c05a049fbbb291f7a447fb21ad1aebbaf4cd2c1cc7f
|
|
| MD5 |
512f281b6231df67046073541cb2c0b0
|
|
| BLAKE2b-256 |
95b367536831e7839f9bff9a02e8c0fc06a4c8252862e2657699b87d70edbca0
|