Immutable struct with sane defaults
Immutable struct built on top of collections.namedtuple with sane defaults
- Immutable, dictionary-like data structure (Note: istruct is not an immutable version of the existing struct in Python)
- Support required and optional fields (with default values)
- Strictly disallow positional arguments
pip install istruct
First, create an istruct object called person where first_name and last_name are required whereas middle_name, dob and email are optional (with default values specified).
>>> from istruct import istruct >>> person = istruct("first_name", "last_name", middle_name="", dob="2000-01-01", email=None)
Then, create an instance of person with first_name, last_name and middle_name.
>>> p = person(first_name="Jim", last_name="Raynor", middle_name="Eugene") >>> p istruct(first_name='Jim', last_name='Raynor', email=None, dob='2000-01-01', middle_name='Eugene')
You can retrieve field values like you would normally do.
>>> p.first_name 'Jim' >>> p.dob '2000-01-01'
p is immutable, meaning that it cannot be modified after created. Thus, set/delete operations like below would fail, raising an AttributeError.
>>> p.first_name = "James" Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: can't set attribute >>> del p.email Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: can't delete attribute
istruct only accepts named/keyword arguments. It strictly disallows positional arguments by design.
>>> p = person("Jim", "Raynor") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/microamp/src/microamp/istruct/istruct/__init__.py", line 52, in _istruct "(%d found)" % (len(positional),)) TypeError: No positional arguments are allowed in istruct (2 found)
istruct would raise a TypeError when one or more required fields are omitted.
>>> p = person(last_name="Raynor") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/microamp/src/microamp/istruct/istruct/__init__.py", line 56, in _istruct return nt(**merge_dicts(kwargs, attrs)) TypeError: __new__() missing 1 required positional argument: 'first_name'
- Python 2.7
- Python 3.2
- Python 3.3
- Python 3.4
- Python 3.5
- Python 3.6
- Find ways to annotate types