datahold
Project description
Overview
Wrap common mutable datastructures for inheritance with modification.
Content
HoldABC
class HoldABC(abc.ABC):
@abc.abstractmethod
def __init__(self, *args, **kwargs) -> None: ...
@property
@abc.abstractmethod
def data(self): ...
HoldList
To understand the class HoldList here the beginning of its code:
class HoldList(HoldABC, collections.abc.MutableSequence):
data: list
@functools.wraps(list.__add__)
def __add__(self, *args, **kwargs):
data = self.data
ans = data.__add__(*args, **kwargs)
self.data = data
return ans
The following methods are defined this way: __add__, __contains__, __delitem__, __eq__, __format__, __ge__, __getitem__, __gt__, __hash__, __iadd__, __imul__, __iter__, __le__, __len__, __lt__, __mul__, __repr__, __reversed__, __rmul__, __setitem__, __str__, append, clear, copy, count, extend, index, insert, pop, remove, reverse, sort.
The only function present in list and absent in HoldList is __class_getitem__
We can use HoldList as parent for a list-like class. It is necessary to implement in the subclass:
a property named data
the __init__ magic method
This allows the creatation of a list-like class with modified behaviour with only minimal effort. To enhance perpormance we can overwrite some of the methods.
HoldDict
Just like HoldList but for dict… It inherits from HoldABC and collections.abc.MutableMapping. The following methods are implemented: __contains__, __delitem__, __eq__, __format__, __ge__, __getitem__, __gt__, __hash__, __ior__, __iter__, __le__, __len__, __lt__, __or__, __repr__, __reversed__, __ror__, __setitem__, __str__, clear, copy, get, items, keys, pop, popitem, setdefault, update, values. The classmethods __class_getitem__ and fromkeys are not implemented.
HoldSet
Just like HoldSet but for set… It inherits from HoldABC and collections.abc.MutableSet. The following methods are implemented: __and__, __contains__, __eq__, __format__, __ge__, __gt__, __hash__, __iand__, __ior__, __isub__, __iter__, __ixor__, __le__, __len__, __lt__, __or__, __rand__, __repr__, __ror__, __rsub__, __rxor__, __str__, __sub__, __xor__, add, clear, copy, difference, difference_update, discard, intersection, intersection_update, isdisjoint, issubset, issuperset, pop, remove, symmetric_difference, symmetric_difference_update, union, update. The classmethod __class_getitem__ is not implemented.
OkayABC
A common abc for OkayList, OkayDict, and OkaySet. Child of Protected (see protectedclasses), Scaevola (see scaevola), and HoldABC. It implements common sense overwrites for some methods. For example:
all methods that cannot actually change the underlying object are now bound to _data instead of data
__bool__ is implemented as bool(self._data) because neither list, dict, nor set have a __bool__ method defined.
__hash__ raises now a more fitting exception
the comparison operations are overwritten:
__eq__ returns self._data == type(self._data)(other)
__ne__ negates __eq__
__ge__ returns type(self)(other) <= self (inherited from scaevola.Scaevola)
__gt__ returns not (self == other) and (self >= other)
__lt__ returns not (self == other) and (self <= other)
__le__ returns self._data <= type(self)(other)._data
modify __eq__ or __le__ as needed to change the behaviour of the other comparison methods
OkayList
This class inherits from HoldList and OkayABC. It implements a data property that binds a variable _data.
@property
def data(self, /):
return list(self._data)
@data.setter
def data(self, values, /):
self._data = list(values)
@data.deleter
def data(self, /):
self._data = list()
Based on that it implements common sense methods. For example:
all methods that returned a list before now return OkayList (type adapts to further inheritance)
__init__ allows now to set data immediately
OkayDict
A subclass of HoldDict with common sense implementations for further inheritance just like OkayList for HoldList.
OkaySet
A subclass of HoldSet with common sense implementations for further inheritance just like OkayList for HoldList.
Installation
To install datahold, you can use pip. Open your terminal and run:
pip install datahold
License
This project is licensed under the MIT License.
Links
Credits
Author: Johannes
Thank you for using datahold!
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 Distribution
Built Distribution
File details
Details for the file datahold-1.1.4.tar.gz
.
File metadata
- Download URL: datahold-1.1.4.tar.gz
- Upload date:
- Size: 9.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01e060d097aa61e8a93423e6add181f765baf74f52f434ce78bff69ade540865 |
|
MD5 | 8d47f51e538dc26d70ba50124d17b234 |
|
BLAKE2b-256 | 8c8db299e80ff1174c440c09f100b1f8783eb88efa8cb438231caa6e6278a686 |
File details
Details for the file datahold-1.1.4-py3-none-any.whl
.
File metadata
- Download URL: datahold-1.1.4-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2debe9272983f4d702290566054f76172da710ca0dc5c0d96915b3af9d6e3214 |
|
MD5 | 9384cc64c56bc36116727a6799cca8ab |
|
BLAKE2b-256 | cda1c61be2b9e827bc1d5dedaff83264f622b7850469a72a2408770f8020559d |