Repository: thetacom/byteclasses (language: python)

Issue:
Adjust all byteclasses to have a consistent instantiation parameters
Adjust classes and decorators so nearly all byteclasses can be instantiated with a standard set of parameters.

`class Byteclass(data: ByteString | None = None, byte_order: bytes = b'@', check_constraints: bool = True)`

- Numeric classes will also have a `value` parameter. The `value` and `data` parameters will be mutually exclusive.
- `FixedArray` will have a required `item_count` parameter and an optional `item_type` parameter.


Discussion / hints:

Fix patch:
diff --git a/byteclasses/handlers/executables/elf/elf_hdr.py b/byteclasses/handlers/executables/elf/elf_hdr.py
index cc278b8..7b5fc32 100644
--- a/byteclasses/handlers/executables/elf/elf_hdr.py
+++ b/byteclasses/handlers/executables/elf/elf_hdr.py
@@ -29,7 +29,7 @@ class BitField32(BitField):
 class ElfHdr32:
     """32-bit Elf Header Class."""
 
-    e_ident: String = member(default_factory=lambda: String(16))  # type: ignore
+    e_ident: String = member(factory=lambda byte_order: String(16))  # type: ignore
     e_type: UInt16
     e_machine: UInt16
     e_version: UInt32
@@ -49,7 +49,7 @@ class ElfHdr32:
 class ElfHdr64:
     """64-bit Elf Header Class."""
 
-    e_ident: String = member(default_factory=lambda: String(16))  # type: ignore
+    e_ident: String = member(factory=lambda byte_order: String(16))  # type: ignore
     e_type: UInt16
     e_machine: UInt16
     e_version: UInt32
diff --git a/byteclasses/handlers/executables/mach/section.py b/byteclasses/handlers/executables/mach/section.py
index 48f7e52..d47bb53 100644
--- a/byteclasses/handlers/executables/mach/section.py
+++ b/byteclasses/handlers/executables/mach/section.py
@@ -24,8 +24,8 @@ class Section32:
     [section](https://developer.apple.com/documentation/kernel/section/)
     """
 
-    sectname: String = member(default_factory=lambda: String(16))  # type: ignore
-    segname: String = member(default_factory=lambda: String(16))  # type: ignore
+    sectname: String = member(factory=lambda byte_order: String(16))  # type: ignore
+    segname: String = member(factory=lambda byte_order: String(16))  # type: ignore
     addr: Ptr32
     size: UInt32
     offset: Ptr32
@@ -44,8 +44,8 @@ class Section64:
     [section_64](https://developer.apple.com/documentation/kernel/section_64/)
     """
 
-    sectname: String = member(default_factory=lambda: String(16))  # type: ignore
-    segname: String = member(default_factory=lambda: String(16))  # type: ignore
+    sectname: String = member(factory=lambda byte_order: String(16))  # type: ignore
+    segname: String = member(factory=lambda byte_order: String(16))  # type: ignore
     addr: Ptr64
     size: UInt64
     offset: Ptr32
diff --git a/byteclasses/handlers/executables/mach/seg_cmd.py b/byteclasses/handlers/executables/mach/seg_cmd.py
index 8d26a11..66f18b1 100644
--- a/byteclasses/handlers/executables/mach/seg_cmd.py
+++ b/byteclasses/handlers/executables/mach/seg_cmd.py
@@ -20,7 +20,7 @@ class SegCmd32:
 
     cmd: UInt32
     cmdsize: UInt32
-    segname: String = member(default_factory=lambda: String(16))  # type: ignore
+    segname: String = member(factory=lambda byte_order: String(16))  # type: ignore
     vmaddr: Ptr32
     vmsize: UInt32
     fileoff: Ptr32
@@ -37,7 +37,7 @@ class SegCmd64:
 
     cmd: UInt32
     cmdsize: UInt32
-    segname: String = member(default_factory=lambda: String(16))  # type: ignore
+    segname: String = member(factory=lambda byte_order: String(16))  # type: ignore
     vmaddr: Ptr64
     vmsize: UInt64
     fileoff: Ptr64
diff --git a/byteclasses/handlers/executables/mach/uuid_cmd.py b/byteclasses/handlers/executables/mach/uuid_cmd.py
index 9d7dbad..67ed370 100644
--- a/byteclasses/handlers/executables/mach/uuid_cmd.py
+++ b/byteclasses/handlers/executables/mach/uuid_cmd.py
@@ -16,4 +16,4 @@ class UUIDCmd:
 
     cmd: Ptr32
     cmdsize: UInt32
-    uuid: FixedArray = member(default_factory=lambda: FixedArray(16))  # type: ignore
+    uuid: FixedArray = member(factory=lambda byte_order: FixedArray(16))  # type: ignore
diff --git a/byteclasses/handlers/executables/pe/dos_hdr.py b/byteclasses/handlers/executables/pe/dos_hdr.py
index 5b0db24..ce2e34b 100644
--- a/byteclasses/handlers/executables/pe/dos_hdr.py
+++ b/byteclasses/handlers/executables/pe/dos_hdr.py
@@ -50,8 +50,8 @@ class DOSHdr:
     e_cs: UInt16  # Initial (relative) CS value
     e_lfarlc: UInt16  # File address of relocation table
     e_ovno: UInt16  # Overlay number
-    e_res: FixedArray = member(default_factory=lambda: FixedArray(4, UInt16))  # type: ignore
+    e_res: FixedArray = member(factory=lambda byte_order: FixedArray(4, UInt16))  # type: ignore
     e_oemid: UInt16  # OEM identifier (for e_oeminfo)
     e_oeminfo: UInt16  # OEM information; e_oemid specific
-    e_res2: FixedArray = member(default_factory=lambda: FixedArray(10, UInt16))  # type: ignore
+    e_res2: FixedArray = member(factory=lambda byte_order: FixedArray(10, UInt16))  # type: ignore
     e_lfanew: Ptr32  # File address of new exe header
diff --git a/byteclasses/handlers/executables/pe/opt_hdr32.py b/byteclasses/handlers/executables/pe/opt_hdr32.py
index 2db2f49..2816118 100644
--- a/byteclasses/handlers/executables/pe/opt_hdr32.py
+++ b/byteclasses/handlers/executables/pe/opt_hdr32.py
@@ -88,4 +88,4 @@ class OptHdr32:
     size_of_heap_commit: UInt32
     loader_flags: BitField32
     num_of_rva_and_sizes: UInt32
-    data_directory: FixedArray = member(default_factory=lambda: FixedArray(NUM_DIR_ENT, DataDir))  # type: ignore
+    data_directory: FixedArray = member(factory=lambda byte_order: FixedArray(NUM_DIR_ENT, DataDir))  # type: ignore
diff --git a/byteclasses/handlers/executables/pe/opt_hdr64.py b/byteclasses/handlers/executables/pe/opt_hdr64.py
index 0a5f0af..7249b23 100644
--- a/byteclasses/handlers/executables/pe/opt_hdr64.py
+++ b/byteclasses/handlers/executables/pe/opt_hdr64.py
@@ -80,4 +80,4 @@ class OptHdr64:
     size_of_heap_commit: UInt64
     loader_flags: BitField32
     num_of_rva_and_sizes: UInt32
-    data_directory: FixedArray = member(default_factory=lambda: FixedArray(NUM_DIR_ENT, DataDir))  # type: ignore
+    data_directory: FixedArray = member(factory=lambda byte_order: FixedArray(NUM_DIR_ENT, DataDir))  # type: ignore
diff --git a/byteclasses/handlers/network/eth_hdr.py b/byteclasses/handlers/network/eth_hdr.py
index 51b5ec5..d7248c5 100644
--- a/byteclasses/handlers/network/eth_hdr.py
+++ b/byteclasses/handlers/network/eth_hdr.py
@@ -8,6 +8,6 @@
 class EthHdr:
     """Ethernet Header Class."""
 
-    dst_mac: FixedArray = member(default_factory=lambda: FixedArray(6))  # type: ignore
-    src_mac: FixedArray = member(default_factory=lambda: FixedArray(6))  # type: ignore
+    dst_mac: FixedArray = member(factory=lambda byte_order: FixedArray(6))  # type: ignore
+    src_mac: FixedArray = member(factory=lambda byte_order: FixedArray(6))  # type: ignore
     ether_type: UInt16
diff --git a/byteclasses/handlers/network/ipv4_hdr.py b/byteclasses/handlers/network/ipv4_hdr.py
index 8b84ddd..723dae7 100644
--- a/byteclasses/handlers/network/ipv4_hdr.py
+++ b/byteclasses/handlers/network/ipv4_hdr.py
@@ -23,7 +23,7 @@ class FlagsOff(BitField):
     """IPv4 Flags BitField."""
 
     byte_length = 2
-    flags = BitPos(0, bit_width=3)
+    pkt_flags = BitPos(0, bit_width=3)
     fragment_offset = BitPos(3, bit_width=13)
 
 
@@ -31,7 +31,7 @@ class FlagsOff(BitField):
 class IPv4Addr:
     """IPv4 Address."""
 
-    uint8: FixedArray = member(default_factory=lambda: FixedArray(4, byte_order=b"!"))  # type: ignore
+    uint8: FixedArray = member(factory=lambda byte_order: FixedArray(4, byte_order=byte_order))  # type: ignore
     uint32: UInt32
 
 
diff --git a/byteclasses/handlers/network/ipv6_hdr.py b/byteclasses/handlers/network/ipv6_hdr.py
index e2296d3..9a83a60 100644
--- a/byteclasses/handlers/network/ipv6_hdr.py
+++ b/byteclasses/handlers/network/ipv6_hdr.py
@@ -18,9 +18,9 @@ class VTF(BitField):
 class IPv6Addr:
     """IPv6 Address."""
 
-    uint8: FixedArray = member(default_factory=lambda: FixedArray(16, byte_order=b"!"))  # type: ignore
-    uint32: UInt32 = member(default_factory=lambda: FixedArray(4, UInt32, byte_order=b"!"))  # type: ignore
-    uint64: UInt32 = member(default_factory=lambda: FixedArray(2, UInt64, byte_order=b"!"))  # type: ignore
+    uint8: FixedArray = member(factory=lambda byte_order: FixedArray(16, byte_order=byte_order))  # type: ignore
+    uint32: UInt32 = member(factory=lambda byte_order: FixedArray(4, UInt32, byte_order=byte_order))  # type: ignore
+    uint64: UInt32 = member(factory=lambda byte_order: FixedArray(2, UInt64, byte_order=byte_order))  # type: ignore
 
 
 @structure(byte_order=b"!", packed=True)
@@ -41,7 +41,7 @@ class HopByHopExtHdr:
 
     next_hdr: UInt8
     hdr_ext_length: UInt8
-    options: FixedArray = member(default_factory=lambda: FixedArray(14, byte_order=b"!"))  # type: ignore
+    options: FixedArray = member(factory=lambda byte_order: FixedArray(14, byte_order=byte_order))  # type: ignore
 
 
 @structure(byte_order=b"!", packed=True)
@@ -52,14 +52,14 @@ class RoutingExtHdr:
     hdr_ext_length: UInt8
     routing_type: UInt8
     segments_left: UInt8
-    type_data: FixedArray = member(default_factory=lambda: FixedArray(12, byte_order=b"!"))  # type: ignore
+    type_data: FixedArray = member(factory=lambda byte_order: FixedArray(12, byte_order=byte_order))
 
 
 class FragmentBitField(BitField):
     """IPv6 Fragment Offset and more follows flag bitfield."""
 
     byte_length = 2
-    offset = BitPos(0, bit_width=13)
+    frag_offset = BitPos(0, bit_width=13)
     reserved = BitPos(13, bit_width=2)
     more = BitPos(15)
 
diff --git a/byteclasses/types/collections/_fixed_collection_type.py b/byteclasses/types/collections/_fixed_collection_type.py
index c3fbce8..4db5204 100644
--- a/byteclasses/types/collections/_fixed_collection_type.py
+++ b/byteclasses/types/collections/_fixed_collection_type.py
@@ -11,13 +11,11 @@
 from ...util import is_byteclass_collection, is_byteclass_collection_instance
 from .._fixed_size_type import _FixedSizeType
 from ._collection_class_spec import _CollectionClassSpec
-from ._collection_params import _CollectionParams
 from ._methods import (
     _build_attach_members_method,
     _build_attach_method,
     _build_bytes_method,
     _build_cmp_method,
-    _build_collection_init_method,
     _build_data_property,
     _build_delattr_method,
     _build_getitem_method,
@@ -26,8 +24,10 @@
     _build_repr_method,
     _build_setattr_method,
     _build_setitem_method,
+    _build_str_method,
     _raise_hash_exception,
 )
+from ._params import _Params
 from ._util import _set_new_attribute, _set_qualname, _tuple_str
 from .fixed_size_collection_protocol import FixedSizeCollection, FixedSizeCollectionError
 from .member import _MEMBER, MISSING, Member, _get_member, _MissingType
@@ -112,9 +112,9 @@ class fields, but the order is defined by the base class, which is found first.
     setattr(
         spec.base_cls,
         _PARAMS,
-        _CollectionParams(spec),
+        _Params(spec),
     )
-    spec.attributes.extend(["offset", "_length", "_data"])
+    spec.attributes.extend(["offset", "byte_order", "_length", "_data"])
     # Find our base classes in reverse MRO order, and exclude
     # ourselves.  In reversed order so that more derived classes
     # override earlier member definitions in base classes.
@@ -176,10 +176,10 @@ def _add_members(spec: _CollectionClassSpec, members_: dict[str, Member]) -> Non
     # We use this to compute members that are added by this class.
     #
     # Members are found from cls_annotations, which is guaranteed to be ordered.
-    # Default values are from class attributes, if a member has a default.  If the
-    # default value is a Member(), then it contains additional info beyond (and
-    # possibly including) the actual default value.  Pseudo-fields like ClassVars
-    # are included, despite the fact that they're not real fields.
+    # Default values are from class attributes, if a member has a default.  Defaults
+    # are only allowed if it is a Member(), then it contains additional info beyond (and
+    # possibly including) the factory.  Pseudo-fields like ClassVars and InitVars are
+    # not supported at this time.
     cls_annotations = spec.base_cls.__dict__.get("__annotations__", {})
 
     # Now find members in our class.  While doing so, perform validations and set
@@ -196,14 +196,8 @@ def _add_members(spec: _CollectionClassSpec, members_: dict[str, Member]) -> Non
         # and is of type 'Member', replace it with the real default.  This is so that
         # normal class introspection sees a real default value, not a Member.
         try:
-            if isinstance(getattr(spec.base_cls, member_.name), Member):
-                if member_.default is MISSING:
-                    # If there's no default, delete the class attribute.
-                    # If we're using a default factory. The class attribute should not
-                    # be set at all in the post-processed class.
-                    delattr(spec.base_cls, member_.name)
-                else:
-                    setattr(spec.base_cls, member_.name, deepcopy(member_.default))
+            if not isinstance(getattr(spec.base_cls, member_.name), Member):
+                raise ValueError("Member's cannot have default values.")
         except AttributeError:
             # Allow missing members to use type annotation as default factory.
             pass
@@ -243,11 +237,11 @@ def _add_methods(spec: _CollectionClassSpec, globals_: dict[str, Any]):
         build_hash_method_ = _build_hash_method
 
     methods: dict[str, Callable | None] = {
-        "_collection_init": _build_collection_init_method,
         "data": _build_data_property,
         "__bytes__": _build_bytes_method,
         "__hash__": build_hash_method_,
         "__len__": _build_len_method,
+        "__str__": _build_str_method,
         "__repr__": _build_repr_method,
         "__getitem__": _build_getitem_method,
         "__setitem__": _build_setitem_method,
@@ -311,7 +305,7 @@ def _set_params(spec: _CollectionClassSpec):
     setattr(
         spec.base_cls,
         _PARAMS,
-        _CollectionParams(spec),
+        _Params(spec),
     )
 
 
diff --git a/byteclasses/types/collections/_methods.py b/byteclasses/types/collections/_methods.py
index d9c0f0d..6497bd2 100644
--- a/byteclasses/types/collections/_methods.py
+++ b/byteclasses/types/collections/_methods.py
@@ -6,10 +6,11 @@
 from reprlib import recursive_repr
 from typing import Any, cast
 
+from ..._enums import ByteOrder
 from ._collection_class_spec import _CollectionClassSpec
 from ._util import _tuple_str
 from .fixed_size_collection_protocol import FixedSizeCollectionError
-from .member import _HAS_DEFAULT_FACTORY, MISSING, _init_param, _member_assign
+from .member import MISSING, _member_assign
 
 
 def _create_method(
@@ -51,12 +52,26 @@ def _build_init_method(
 ) -> Callable:
     """Create structure init function."""
     locals_: dict[str, Any] = {f"_type_{member_.name}": member_.type for member_ in spec.members}
-    locals_.update({"MISSING": MISSING, "_HAS_DEFAULT_FACTORY": _HAS_DEFAULT_FACTORY})
-
+    locals_.update({"MISSING": MISSING, "ByteString": ByteString, "ByteOrder": ByteOrder})
+    init_body = [
+        _member_assign("byte_order", "byte_order", spec.self_name),
+        _member_assign("offset", "0", spec.self_name),
+    ]
+    init_body.extend(body)
+    init_body.extend(
+        [
+            # Initialize _data
+            _member_assign("_data", f"memoryview(bytearray({spec.self_name}._length))", spec.self_name),
+            # Attach members to slices of _data memoryview
+            f"{spec.self_name}._attach_members(retain_value=True)",
+            "if data is not None:",
+            f"  {spec.self_name}.data = data",
+        ]
+    )
     return _create_method(
         "__init__",
-        [spec.self_name] + [_init_param(member_) for member_ in spec.members],
-        body,
+        [spec.self_name, "data: ByteString | None = None", f"byte_order: bytes = {spec.byte_order.value!r}"],
+        init_body,
         locals_=locals_,
         globals_=globals_,
         return_type=None,
@@ -93,6 +108,29 @@ def _build_repr_method(spec: _CollectionClassSpec, globals_: dict[str, Any] | No
     func = _create_method(
         "__repr__",
         (spec.self_name,),
+        [
+            "return "
+            + spec.self_name
+            + '.__class__.__qualname__ + f"(byte_order={ '
+            + spec.self_name
+            + ".byte_order},"
+            + "data={"
+            + spec.self_name
+            + '.data!r})"',
+        ],
+        # decorators=["recursive_repr"],
+        globals_=globals_,
+        locals_=locals_,
+    )
+    return func
+
+
+def _build_str_method(spec: _CollectionClassSpec, globals_: dict[str, Any] | None) -> Callable:
+    """Create the __str__ function for a fixed collection class."""
+    locals_ = {"recursive_repr": recursive_repr}
+    func = _create_method(
+        "__str__",
+        (spec.self_name,),
         [
             "return "
             + spec.self_name
@@ -169,35 +207,6 @@ def _raise_hash_exception(spec: _CollectionClassSpec, __) -> None:
     raise TypeError(f"Cannot overwrite attribute __hash__ " f"in class {spec.base_cls.__name__}")
 
 
-def _build_collection_init_method(
-    spec: _CollectionClassSpec,
-    globals_: dict[str, Any],
-) -> Callable:
-    """Generate a private _collection_init method for the class.
-
-    Initializes common attributes.
-    """
-    locals_ = {
-        "cls": spec.base_cls,
-    }
-    body = [
-        _member_assign("offset", "0", spec.self_name),
-        _member_assign("_length", "length", spec.self_name),
-        # Initialize _data
-        _member_assign("_data", "memoryview(bytearray(length))", spec.self_name),
-        # Attach members to slices of _data memoryview
-        f"{spec.self_name}._attach_members(retain_value=True)",
-    ]
-    return _create_method(
-        "_collection_init",
-        (spec.self_name, "length: int"),
-        body,
-        locals_=locals_,
-        globals_=globals_,
-        return_type=None,
-    )
-
-
 def _build_attach_method(
     spec: _CollectionClassSpec,
     globals_: dict[str, Any],
diff --git a/byteclasses/types/collections/_collection_params.py b/byteclasses/types/collections/_params.py
similarity index 69%
rename from byteclasses/types/collections/_collection_params.py
rename to byteclasses/types/collections/_params.py
index 5746cca..5f494e8 100644
--- a/byteclasses/types/collections/_collection_params.py
+++ b/byteclasses/types/collections/_params.py
@@ -3,19 +3,15 @@
 from ._collection_class_spec import _CollectionClassSpec
 
 
-class _CollectionParams:
+class _Params:
     """Contains the collection parameters for a fixed size collection."""
 
-    __slots__ = (
-        "type",
-        "byte_order",
-    )
+    __slots__ = ("type",)
 
     def __init__(self, spec: _CollectionClassSpec) -> None:
         """Initialize the collection parameters."""
         self.type = spec.collection_type
-        self.byte_order = spec.byte_order
 
     def __repr__(self) -> str:
         """Return a repr string for this collection parameters."""
-        return f"_CollectionParams({self.byte_order=!r})"
+        return f"_Params(type={self.type=!r})"
diff --git a/byteclasses/types/collections/fixed_size_collection_protocol.py b/byteclasses/types/collections/fixed_size_collection_protocol.py
index 19c83bc..4033dfa 100644
--- a/byteclasses/types/collections/fixed_size_collection_protocol.py
+++ b/byteclasses/types/collections/fixed_size_collection_protocol.py
@@ -3,7 +3,7 @@
 from collections.abc import ByteString
 from typing import Protocol, runtime_checkable
 
-from ._collection_params import _CollectionParams
+from ._params import _Params
 from .member import Member
 
 __all__ = [
@@ -21,7 +21,7 @@ class FixedSizeCollection(Protocol):
     """Protocol class for fixed size collection types."""
 
     __collection_members__: list[Member]
-    __collection_params__: _CollectionParams
+    __collection_params__: _Params
     data: bytearray
 
     def __call__(self): ...
diff --git a/byteclasses/types/collections/member.py b/byteclasses/types/collections/member.py
index 1b50195..c76abf6 100644
--- a/byteclasses/types/collections/member.py
+++ b/byteclasses/types/collections/member.py
@@ -4,8 +4,9 @@
 import sys
 from collections.abc import Callable
 from types import GenericAlias, MappingProxyType, MemberDescriptorType
-from typing import TYPE_CHECKING, Any
+from typing import TYPE_CHECKING, Any, TypeVar, overload
 
+from ..._enums import ByteOrder
 from ...types._fixed_size_type import _FixedSizeType
 from ...util import is_byteclass_collection
 
@@ -34,14 +35,6 @@ def __repr__(self):
 _MEMBER_CLASSVAR = _MemberBase("_MEMBER_CLASSVAR")
 
 
-class _HasDefaultFactoryClass:  # pylint: disable=R0903
-    def __repr__(self):
-        return "<factory>"
-
-
-_HAS_DEFAULT_FACTORY = _HasDefaultFactoryClass()
-
-
 class _MissingType:  # pylint: disable=R0903
     """A sentinel object to detect if a parameter is supplied or not.
 
@@ -51,6 +44,8 @@ class _MissingType:  # pylint: disable=R0903
 
 MISSING = _MissingType()
 
+MbrT = TypeVar("MbrT")
+
 
 class Member:  # pylint: disable=R0903
     """A member of a fixed size collection.
@@ -70,23 +65,20 @@ class Member:  # pylint: disable=R0903
     __slots__ = (
         "name",
         "type",
-        "default",
-        "default_factory",
+        "factory",
         "metadata",
         "member_type",  # Private: not to be used by user code.
     )
 
     def __init__(
         self,
-        default,
-        default_factory,
+        factory,
         metadata,
     ):
         """Initialize a Member object."""
         self.name: str | None = None
         self.type: type | None = None
-        self.default: Any = default
-        self.default_factory: Callable = default_factory
+        self.factory: Callable[[bytes, ByteOrder], Any] = factory
         self.metadata = _EMPTY_METADATA if metadata is None else MappingProxyType(metadata)
         self.member_type: _MemberBase | None = None
 
@@ -96,8 +88,7 @@ def __repr__(self):
             "Field("
             f"{self.name=!r},"
             f"{self.type=!r},"
-            f"{self.default=!r},"
-            f"{self.default_factory=!r},"
+            f"{self.factory=!r},"
             f"{self.metadata=!r},"
             f"{self.member_type=}"
             ")"
@@ -115,36 +106,42 @@ def __set_name__(self, owner, name):
         with the default value, so the end result is a descriptor that
         had __set_name__ called on it at the right time.
         """
-        func = getattr(type(self.default), "__set_name__", None)
-        if func:
-            # There is a __set_name__ method on the descriptor, call
-            # it.
-            func(self.default, owner, name)
+        func = getattr(self.type, "__set_name__", None)
+        if func and isinstance(func, Callable):
+            # There is a __set_name__ method on the descriptor, call it.
+            func(None, owner, name)  # pylint: disable=E1102
 
     __class_getitem__ = classmethod(GenericAlias)  # type: ignore
 
 
+@overload
+def member(*, factory: Callable[[Any], MbrT], metadata=None) -> MbrT: ...
+
+
+@overload
+def member(*, factory: Callable[[bytes | ByteOrder], _FixedSizeType], metadata=None) -> _FixedSizeType: ...
+
+
+@overload
+def member(*, factory: _MissingType = MISSING, metadata=None) -> Member: ...
+
+
 # This function is used instead of exposing Member creation directly,
 # so that a type checker can be told (via overloads) that this is a
 # function whose type depends on its parameters.
 def member(
     *,
-    default=MISSING,
-    default_factory=MISSING,
+    factory=MISSING,
     metadata=None,
-) -> Member:
+) -> Any:
     """Return an object to identify dataclass fields.
 
-    default is the default value of the field.  default_factory is a
-    0-argument function called to initialize a member's value. metadata, if specified,
+    Unlike dataclasses, byteclasses do not accept `default` values.  `factory` is a
+    0-argument function called to initialize a member. metadata, if specified,
     must be a mapping which is stored but not otherwise examined by the fixed
     collection.
-
-    It is an error to specify both default and default_factory.
     """
-    if default is not MISSING and default_factory is not MISSING:
-        raise ValueError("cannot specify both default and default_factory")
-    return Member(default, default_factory, metadata)
+    return Member(factory, metadata)
 
 
 def _member_assign(name: str, value: Any, self_name: str) -> str:
@@ -157,7 +154,7 @@ def _init_members(spec: "_CollectionClassSpec", globals_: dict[str, Any]) -> lis
     """Initialize all class members."""
     body: list[str] = []
     for member_ in spec.members:
-        init_line = _init_member(member_, globals_, spec.self_name)
+        init_line = _init_member(spec, member_, globals_, spec.self_name)
         body.extend(
             [
                 init_line,
@@ -171,6 +168,7 @@ def _init_members(spec: "_CollectionClassSpec", globals_: dict[str, Any]) -> lis
 
 
 def _init_member(
+    spec: "_CollectionClassSpec",
     member_: Member,
     globals_: dict[str, Any],
     self_name: str,
@@ -178,51 +176,19 @@ def _init_member(
     # Return the text of the line in the body of __init__ that will
     # initialize this field.
 
-    default_name = f"_dflt_{member_.name}"
-    if member_.default is not MISSING:
-        globals_[default_name] = member_.default
-        value = member_.name
+    init_name = f"_init_{member_.name}"
+    if member_.factory is not MISSING:
+        globals_[init_name] = member_.factory
     else:
-        if member_.default_factory is not MISSING:
-            globals_[default_name] = member_.default_factory
-        else:
-            # No default factory. Use member type as constructor.
-            globals_[default_name] = member_.type
-        value = f"{default_name}() " f"if {member_.name} is _HAS_DEFAULT_FACTORY " f"else {member_.name}"
+        # No factory. Use member type as constructor.
+        globals_[init_name] = member_.type
+    value = f"{init_name}(byte_order={spec.byte_order})"
     if member_.name is None:
         raise ValueError("Member name cannot be None.")
     # Now, actually generate the member assignment.
     return _member_assign(member_.name, value, self_name)
 
 
-def _init_param(member_: Member) -> str:
-    # Return the __init__ parameter string for this field.  For
-    # example, the equivalent of 'x: int = 3' (except instead of 'int',
-    # reference a variable set to int, and instead of '3', reference a
-    # variable set to 3).
-    if member_.default is not MISSING:
-        # There's a default, this will be the name that's used to look
-        # it up.
-        default = f"=_dflt_{member_.name}"
-    else:
-        # Name used when default factory is provided or inferred.
-        default = "=_HAS_DEFAULT_FACTORY"
-    return f"{member_.name}:_type_{member_.name}{default}"
-
-
-def _is_classvar(a_type, typing) -> bool:
-    """Test is the provided type is a ClassVar.
-
-    This test uses a typing internal class, but it's the best way to test if this
-    is a ClassVar.
-    """
-    return a_type is typing.ClassVar or (
-        type(a_type)  # pylint: disable=unidiomatic-typecheck
-        is typing._GenericAlias  # pylint: disable=protected-access
-        and a_type.__origin__ is typing.ClassVar
-    )
-
-
 def _is_type(
     annotation: str,
     cls: type,
@@ -296,13 +262,17 @@ def _get_member(cls: type, a_name: str, a_type: type):
     to a Member().
     """
     default = getattr(cls, a_name, MISSING)
+
     if isinstance(default, Member):
         member_ = default
+    elif default != MISSING:
+        raise ValueError("Collection member cannot have a default value.")
+    elif isinstance(default, MemberDescriptorType):
+        # This is a member in __slots__, so it has no default value.
+        pass
+        # default = MISSING
     else:
-        if isinstance(default, MemberDescriptorType):
-            # This is a member in __slots__, so it has no default value.
-            default = MISSING
-        member_ = member(default=default)
+        member_ = member()
 
     # Only at this point do we know the name and the type.  Set them.
     member_.name = a_name
@@ -312,44 +282,13 @@ def _get_member(cls: type, a_name: str, a_type: type):
     # going to decide if it's a ClassVar, everything else is just a normal member.
     member_.member_type = _MEMBER
 
-    # In addition to checking for actual types here, also check for
-    # string annotations.  get_type_hints() won't always work for us
-    # (see https://github.com/python/typing/issues/508 for example),
-    # plus it's expensive and would require an eval for every string
-    # annotation.  So, make a best effort to see if this is a ClassVar
-    # using regex's and checking that the thing referenced
-    # is actually of the correct type.
-
-    # For the complete discussion, see https://bugs.python.org/issue33453
-
-    # If typing has not been imported, then it's impossible for any
-    # annotation to be a ClassVar.  So, only look for ClassVar if
-    # typing has been imported by any module (not necessarily cls's
-    # module).
-    typing = sys.modules.get("typing")
-    if typing:
-        if _is_classvar(a_type, typing) or (
-            isinstance(member_.type, str) and _is_type(member_.type, cls, typing, typing.ClassVar, _is_classvar)
-        ):
-            member_.member_type = _MEMBER_CLASSVAR
-
     # Validations for individual fields.  This is delayed until now,
     # instead of in the Field() constructor, since only here do we
     # know the field name, which allows for better error reporting.
 
-    # Special restrictions for ClassVar and InitVar.
-    if member_.member_type is _MEMBER_CLASSVAR:
-        if member_.default_factory is not MISSING:
-            raise TypeError(f"member {member_.name} cannot have a default factory")
-
     # For real members, disallow any non fixed types
     if member_.member_type is _MEMBER:
         # Verify that the type is fixed.
         if not issubclass(member_.type, _FixedSizeType) and not is_byteclass_collection(member_.type):
             raise TypeError(f"member {member_.name} has invalid type {member_.type!r}")
-        # Verify the default is the same type as the field.
-        if member_.default is not MISSING and not isinstance(member_.default, member_.type):
-            raise TypeError(
-                f"member {member_.name} ({type(member_.default)}) default value " f"must be of type {member_.type!r}"
-            )
     return member_
diff --git a/byteclasses/types/collections/structure.py b/byteclasses/types/collections/structure.py
index 6b5bc5d..f4652b6 100644
--- a/byteclasses/types/collections/structure.py
+++ b/byteclasses/types/collections/structure.py
@@ -8,7 +8,7 @@
 from ._collection_class_spec import _CollectionClassSpec
 from ._methods import _build_init_method
 from .fixed_size_collection_protocol import FixedSizeCollection
-from .member import _init_members
+from .member import _init_members, _member_assign
 
 __all__ = ["structure"]
 
@@ -69,8 +69,8 @@ def _build_structure_init_method(
             [
                 f"{spec.self_name}.{member_.name}.offset = collection_length",
                 "collection_length += mbr_len",
+                _member_assign("_length", "collection_length", spec.self_name),
             ]
         )
 
-    body.append(f"{spec.self_name}._collection_init(collection_length)")
     return _build_init_method(spec, body, globals_)
diff --git a/byteclasses/types/collections/union.py b/byteclasses/types/collections/union.py
index 5ed72ba..1c602ad 100644
--- a/byteclasses/types/collections/union.py
+++ b/byteclasses/types/collections/union.py
@@ -8,7 +8,7 @@
 from ._collection_class_spec import _CollectionClassSpec
 from ._methods import _build_init_method
 from .fixed_size_collection_protocol import FixedSizeCollection
-from .member import _init_members
+from .member import _init_members, _member_assign
 
 __all__ = ["union"]
 
@@ -61,7 +61,7 @@ def _build_union_init_method(
         [
             f"member_lengths = {lengths_str}",
             "collection_length = max(member_lengths)",
-            f"{spec.self_name}._collection_init(collection_length)",
+            _member_assign("_length", "collection_length", spec.self_name),
         ]
     )
 
diff --git a/docs/collections/structure.md b/docs/collections/structure.md
index dba237f..5cb351c 100644
--- a/docs/collections/structure.md
+++ b/docs/collections/structure.md
@@ -17,16 +17,16 @@ The length of a Structure byteclass is determined when the class is created base
 
 A Structure byteclass can contain both byteclass primitives and other byteclass collections.
 
-Each Structure member has its own `byte_order`. However, the `structure` decorator accepts a `byte_order` parameter which is used for any members that rely on a `default_factory` for instantiation.
+Each Structure member has its own `byte_order`. However, the `structure` decorator accepts a `byte_order` parameter which is used for any members that rely on a `factory` for instantiation.
 
-> If no member value is specified, the member type annotation is used as a `default_factory`.
+> If no member value is specified, the member type annotation is used as a `factory`.
 
 ```python
 @structure(byte_order=b"@")
 class Structure1:
     """A structure byteclass with one member using default factory."""
 
-    a: UInt64 = member(default_factory=UInt64)
+    a: UInt64 = member(factory=UInt64)
 
 @structure
 class Structure2:
diff --git a/docs/collections/union.md b/docs/collections/union.md
index 609850b..6abfd41 100644
--- a/docs/collections/union.md
+++ b/docs/collections/union.md
@@ -17,14 +17,14 @@ The length of a Union byteclass is determined when the class is created based on
 
 A Union byteclass can contain both byteclass primitives and other byteclass collections.
 
-Each Union member has its own `byte_order`. However, the `union` decorator accepts a `byte_order` parameter which is used for any members that rely on a `default_factory` for instantiation.
+Each Union member has its own `byte_order`. However, the `union` decorator accepts a `byte_order` parameter which is used for any members that rely on a `factory` for instantiation.
 
 ```python
 @union(byte_order=b"@")
 class Union1:
     """A union byteclass with one member using default factory."""
 
-    a: UInt64 = member(default_factory=UInt64)
+    a: UInt64 = member(factory=UInt64)
 
 @union
 class Union2:
diff --git a/docs/examples/basic/bitfield.ipynb b/docs/examples/basic/bitfield.ipynb
index 06f27e5..20acfee 100644
--- a/docs/examples/basic/bitfield.ipynb
+++ b/docs/examples/basic/bitfield.ipynb
@@ -663,16 +663,7 @@
    "cell_type": "code",
    "execution_count": 13,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "MultiBitField(1000000000000001, flags={'first': 1, 'last': True}) 1 True\n",
-      "{'first': 1, 'last': True}\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "print(mbf, mbf.first, mbf.last)\n",
     "print(mbf.flags)"
diff --git a/docs/examples/basic/characters.ipynb b/docs/examples/basic/characters.ipynb
index 463af42..d82fdb1 100644
--- a/docs/examples/basic/characters.ipynb
+++ b/docs/examples/basic/characters.ipynb
@@ -37,34 +37,40 @@
      "data": {
       "text/html": [
        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                                  Byteclass Info                                                   </span>\n",
-       "┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Property </span>┃<span style=\"font-weight: bold\"> Value                                                                                                </span>┃\n",
-       "┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> UChar                                                                                                </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">mro     </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> UChar -&gt; UInt8 -&gt; _FixedInt -&gt; _FixedNumericType -&gt; _FixedSizeType -&gt; ABC -&gt; SupportsBytes -&gt;        </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\">          </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> Protocol -&gt; Generic -&gt; object                                                                        </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">len()   </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> 1                                                                                                    </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">str()   </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> A                                                                                                    </span>│\n",
-       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">repr()  </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> UChar('A')                                                                                           </span>│\n",
-       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">.data   </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> b'A'                                                                                                 </span>│\n",
-       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">.value  </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> A                                                                                                    </span>│\n",
-       "└──────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────┘\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                                                               </span>┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> UChar                                                                               </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                                                                </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> False                                                                               </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> True                                                                                </span>│\n",
+       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> UChar -&gt; UInt8 -&gt; _FixedInt -&gt; _FixedNumericType -&gt; _FixedSizeType -&gt; ABC -&gt;        </span>│\n",
+       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\">                           </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> SupportsBytes -&gt; Protocol -&gt; Generic -&gt; object                                      </span>│\n",
+       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 1                                                                                   </span>│\n",
+       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> A                                                                                   </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> UChar('A')                                                                          </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> b'A'                                                                                </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">.value                   </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> A                                                                                   </span>│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
        "\u001b[3m                                                  Byteclass Info                                                   \u001b[0m\n",
-       "┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mProperty\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                                               \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mtype()  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mUChar                                                                                               \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mmro     \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mUChar -> UInt8 -> _FixedInt -> _FixedNumericType -> _FixedSizeType -> ABC -> SupportsBytes ->       \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[91m          \u001b[0m│\u001b[91m \u001b[0m\u001b[91mProtocol -> Generic -> object                                                                       \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mlen()   \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m1                                                                                                   \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mstr()   \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mA                                                                                                   \u001b[0m\u001b[93m \u001b[0m│\n",
-       "│\u001b[94m \u001b[0m\u001b[1;94mrepr()  \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mUChar('A')                                                                                          \u001b[0m\u001b[94m \u001b[0m│\n",
-       "│\u001b[95m \u001b[0m\u001b[1;95m.data   \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95mb'A'                                                                                                \u001b[0m\u001b[95m \u001b[0m│\n",
-       "│\u001b[96m \u001b[0m\u001b[1;96m.value  \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mA                                                                                                   \u001b[0m\u001b[96m \u001b[0m│\n",
-       "└──────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────┘\n"
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                              \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mUChar                                                                              \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                                                               \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mFalse                                                                              \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mTrue                                                                               \u001b[0m\u001b[93m \u001b[0m│\n",
+       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mUChar -> UInt8 -> _FixedInt -> _FixedNumericType -> _FixedSizeType -> ABC ->       \u001b[0m\u001b[94m \u001b[0m│\n",
+       "│\u001b[94m                           \u001b[0m│\u001b[94m \u001b[0m\u001b[94mSupportsBytes -> Protocol -> Generic -> object                                     \u001b[0m\u001b[94m \u001b[0m│\n",
+       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m1                                                                                  \u001b[0m\u001b[95m \u001b[0m│\n",
+       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mA                                                                                  \u001b[0m\u001b[96m \u001b[0m│\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mUChar('A')                                                                         \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mb'A'                                                                               \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92m.value                   \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mA                                                                                  \u001b[0m\u001b[92m \u001b[0m│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -116,34 +122,40 @@
      "data": {
       "text/html": [
        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                                  Byteclass Info                                                   </span>\n",
-       "┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Property </span>┃<span style=\"font-weight: bold\"> Value                                                                                                </span>┃\n",
-       "┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> SChar                                                                                                </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">mro     </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> SChar -&gt; Int8 -&gt; _FixedInt -&gt; _FixedNumericType -&gt; _FixedSizeType -&gt; ABC -&gt; SupportsBytes -&gt;         </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\">          </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> Protocol -&gt; Generic -&gt; object                                                                        </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">len()   </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> 1                                                                                                    </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">str()   </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> 65                                                                                                   </span>│\n",
-       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">repr()  </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> SChar(65)                                                                                            </span>│\n",
-       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">.data   </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> b'A'                                                                                                 </span>│\n",
-       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">.value  </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> 65                                                                                                   </span>│\n",
-       "└──────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────┘\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                                                               </span>┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> SChar                                                                               </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                                                                </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> False                                                                               </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> True                                                                                </span>│\n",
+       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> SChar -&gt; Int8 -&gt; _FixedInt -&gt; _FixedNumericType -&gt; _FixedSizeType -&gt; ABC -&gt;         </span>│\n",
+       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\">                           </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> SupportsBytes -&gt; Protocol -&gt; Generic -&gt; object                                      </span>│\n",
+       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 1                                                                                   </span>│\n",
+       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> 65                                                                                  </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> SChar(65)                                                                           </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> b'A'                                                                                </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">.value                   </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> 65                                                                                  </span>│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
        "\u001b[3m                                                  Byteclass Info                                                   \u001b[0m\n",
-       "┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mProperty\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                                               \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mtype()  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mSChar                                                                                               \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mmro     \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mSChar -> Int8 -> _FixedInt -> _FixedNumericType -> _FixedSizeType -> ABC -> SupportsBytes ->        \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[91m          \u001b[0m│\u001b[91m \u001b[0m\u001b[91mProtocol -> Generic -> object                                                                       \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mlen()   \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m1                                                                                                   \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mstr()   \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93m65                                                                                                  \u001b[0m\u001b[93m \u001b[0m│\n",
-       "│\u001b[94m \u001b[0m\u001b[1;94mrepr()  \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mSChar(65)                                                                                           \u001b[0m\u001b[94m \u001b[0m│\n",
-       "│\u001b[95m \u001b[0m\u001b[1;95m.data   \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95mb'A'                                                                                                \u001b[0m\u001b[95m \u001b[0m│\n",
-       "│\u001b[96m \u001b[0m\u001b[1;96m.value  \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96m65                                                                                                  \u001b[0m\u001b[96m \u001b[0m│\n",
-       "└──────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────┘\n"
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                              \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mSChar                                                                              \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                                                               \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mFalse                                                                              \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mTrue                                                                               \u001b[0m\u001b[93m \u001b[0m│\n",
+       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mSChar -> Int8 -> _FixedInt -> _FixedNumericType -> _FixedSizeType -> ABC ->        \u001b[0m\u001b[94m \u001b[0m│\n",
+       "│\u001b[94m                           \u001b[0m│\u001b[94m \u001b[0m\u001b[94mSupportsBytes -> Protocol -> Generic -> object                                     \u001b[0m\u001b[94m \u001b[0m│\n",
+       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m1                                                                                  \u001b[0m\u001b[95m \u001b[0m│\n",
+       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96m65                                                                                 \u001b[0m\u001b[96m \u001b[0m│\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mSChar(65)                                                                          \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mb'A'                                                                               \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92m.value                   \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m65                                                                                 \u001b[0m\u001b[92m \u001b[0m│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -176,13 +188,6 @@
    "source": [
     "console.print(f\"{schar_var.signed=}\")"
    ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
   }
  ],
  "metadata": {
diff --git a/docs/examples/basic/generics.ipynb b/docs/examples/basic/generics.ipynb
index aeaa3d8..c76f422 100644
--- a/docs/examples/basic/generics.ipynb
+++ b/docs/examples/basic/generics.ipynb
@@ -381,7 +381,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
diff --git a/docs/examples/basic/structure.ipynb b/docs/examples/basic/structure.ipynb
index 6520004..bdb2a8e 100644
--- a/docs/examples/basic/structure.ipynb
+++ b/docs/examples/basic/structure.ipynb
@@ -9,7 +9,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 49,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -18,7 +18,7 @@
     "from byteclasses.print import byteclass_info, byteclass_inspect\n",
     "from byteclasses.types.collections import FixedSizeCollection, structure, member\n",
     "from byteclasses.types.primitives.characters import UChar\n",
-    "from byteclasses.types.primitives.generics import Byte\n",
+    "from byteclasses.types.primitives.generics import Byte, BitField\n",
     "from byteclasses.types.primitives.integers import Int8, UInt8, UInt16, UInt32\n",
     "from byteclasses.types.primitives.floats import Float32"
    ]
@@ -32,7 +32,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 50,
    "metadata": {},
    "outputs": [
     {
@@ -59,43 +59,43 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 51,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                Byteclass Info                                 </span>\n",
-       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                           </span>┃\n",
-       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicStructure                                  </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                            </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> True                                            </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> False                                           </span>│\n",
-       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> BasicStructure -&gt; object                        </span>│\n",
-       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 4                                               </span>│\n",
-       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> BasicStructure(var1=UInt8(0), var2=UInt16(770)) </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicStructure(var1=UInt8(0), var2=UInt16(770)) </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x01\\x02\\x03')                  </span>│\n",
-       "└───────────────────────────┴─────────────────────────────────────────────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                          Byteclass Info                                           </span>\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                                               </span>┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicStructure                                                      </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                                                </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> True                                                                </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> False                                                               </span>│\n",
+       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> BasicStructure -&gt; object                                            </span>│\n",
+       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 4                                                                   </span>│\n",
+       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> BasicStructure(var1=UInt8(0), var2=UInt16(770))                     </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicStructure(byte_order=b'@',data=bytearray(b'\\x00\\x01\\x02\\x03')) </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x01\\x02\\x03')                                      </span>│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m                                Byteclass Info                                 \u001b[0m\n",
-       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                          \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicStructure                                 \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                           \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mTrue                                           \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mFalse                                          \u001b[0m\u001b[93m \u001b[0m│\n",
-       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mBasicStructure -> object                       \u001b[0m\u001b[94m \u001b[0m│\n",
-       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m4                                              \u001b[0m\u001b[95m \u001b[0m│\n",
-       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mBasicStructure(var1=UInt8(0), var2=UInt16(770))\u001b[0m\u001b[96m \u001b[0m│\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicStructure(var1=UInt8(0), var2=UInt16(770))\u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x01\\x02\\x03')                 \u001b[0m\u001b[91m \u001b[0m│\n",
-       "└───────────────────────────┴─────────────────────────────────────────────────┘\n"
+       "\u001b[3m                                          Byteclass Info                                           \u001b[0m\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                              \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicStructure                                                     \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                                               \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mTrue                                                               \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mFalse                                                              \u001b[0m\u001b[93m \u001b[0m│\n",
+       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mBasicStructure -> object                                           \u001b[0m\u001b[94m \u001b[0m│\n",
+       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m4                                                                  \u001b[0m\u001b[95m \u001b[0m│\n",
+       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mBasicStructure(var1=UInt8(0), var2=UInt16(770))                    \u001b[0m\u001b[96m \u001b[0m│\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicStructure(byte_order=b'@',data=bytearray(b'\\x00\\x01\\x02\\x03'))\u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x01\\x02\\x03')                                     \u001b[0m\u001b[91m \u001b[0m│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -108,7 +108,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 52,
    "metadata": {},
    "outputs": [
     {
@@ -171,7 +171,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 53,
    "metadata": {},
    "outputs": [
     {
@@ -204,7 +204,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 54,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -220,43 +220,43 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 55,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                                  Byteclass Info                                                  </span>\n",
-       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                                                              </span>┃\n",
-       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> SimpleStruct                                                                       </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                                                               </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> True                                                                               </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> False                                                                              </span>│\n",
-       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> SimpleStruct -&gt; object                                                             </span>│\n",
-       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 13                                                                                 </span>│\n",
-       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> SimpleStruct(a=UInt8(0), b=UInt16(0), c=UChar('\\x00'), d=Float32(0.0), e=UInt8(0)) </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> SimpleStruct(a=UInt8(0), b=UInt16(0), c=UChar('\\x00'), d=Float32(0.0), e=UInt8(0)) </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                 </span>│\n",
-       "└───────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                                  Byteclass Info                                                   </span>\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                                                               </span>┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> SimpleStruct                                                                        </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                                                                </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> True                                                                                </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> False                                                                               </span>│\n",
+       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> SimpleStruct -&gt; object                                                              </span>│\n",
+       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 13                                                                                  </span>│\n",
+       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> SimpleStruct(a=UInt8(0), b=UInt16(0), c=UChar('\\x00'), d=Float32(0.0), e=UInt8(0))  </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> SimpleStruct(byte_order=b'!',data=bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00… </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                  </span>│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m                                                  Byteclass Info                                                  \u001b[0m\n",
-       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                             \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mSimpleStruct                                                                      \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                                                              \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mTrue                                                                              \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mFalse                                                                             \u001b[0m\u001b[93m \u001b[0m│\n",
-       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mSimpleStruct -> object                                                            \u001b[0m\u001b[94m \u001b[0m│\n",
-       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m13                                                                                \u001b[0m\u001b[95m \u001b[0m│\n",
-       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mSimpleStruct(a=UInt8(0), b=UInt16(0), c=UChar('\\x00'), d=Float32(0.0), e=UInt8(0))\u001b[0m\u001b[96m \u001b[0m│\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mSimpleStruct(a=UInt8(0), b=UInt16(0), c=UChar('\\x00'), d=Float32(0.0), e=UInt8(0))\u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                \u001b[0m\u001b[91m \u001b[0m│\n",
-       "└───────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┘\n"
+       "\u001b[3m                                                  Byteclass Info                                                   \u001b[0m\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                              \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mSimpleStruct                                                                       \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                                                               \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mTrue                                                                               \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mFalse                                                                              \u001b[0m\u001b[93m \u001b[0m│\n",
+       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mSimpleStruct -> object                                                             \u001b[0m\u001b[94m \u001b[0m│\n",
+       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m13                                                                                 \u001b[0m\u001b[95m \u001b[0m│\n",
+       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mSimpleStruct(a=UInt8(0), b=UInt16(0), c=UChar('\\x00'), d=Float32(0.0), e=UInt8(0)) \u001b[0m\u001b[96m \u001b[0m│\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mSimpleStruct(byte_order=b'!',data=bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00…\u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                 \u001b[0m\u001b[91m \u001b[0m│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -269,7 +269,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 56,
    "metadata": {},
    "outputs": [
     {
@@ -338,7 +338,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 57,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -347,7 +347,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 58,
    "metadata": {},
    "outputs": [
     {
@@ -409,7 +409,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 59,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -422,7 +422,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 60,
    "metadata": {},
    "outputs": [
     {
@@ -491,7 +491,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 61,
    "metadata": {},
    "outputs": [
     {
@@ -512,7 +512,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 62,
    "metadata": {},
    "outputs": [
     {
@@ -581,7 +581,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 63,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -592,7 +592,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 64,
    "metadata": {},
    "outputs": [
     {
@@ -661,29 +661,28 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 65,
    "metadata": {},
    "outputs": [],
    "source": [
     "@structure\n",
     "class InnerStruct:\n",
-    "    var0: ClassVar[int] = 23\n",
+    "    var1: BitField\n",
     "    var2: Byte"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 66,
    "metadata": {},
    "outputs": [],
    "source": [
     "@structure(byte_order=ByteOrder.NATIVE, packed=True)\n",
     "class OuterStruct:\n",
-    "    var3: ClassVar[int] = 23\n",
-    "    var4: Int8\n",
-    "    var5: UInt32\n",
-    "    var6: Float32\n",
-    "    var7: InnerStruct = member(default_factory=InnerStruct)\n",
+    "    var3: Int8\n",
+    "    var4: UInt32\n",
+    "    var5: Float32\n",
+    "    var6: InnerStruct = member(factory=InnerStruct)\n",
     "\n",
     "    def test(self):\n",
     "        print(\"test\")\n",
@@ -693,7 +692,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 67,
    "metadata": {},
    "outputs": [
     {
@@ -708,12 +707,11 @@
        "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> True                                                                                </span>│\n",
        "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> False                                                                               </span>│\n",
        "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> OuterStruct -&gt; object                                                               </span>│\n",
-       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 10                                                                                  </span>│\n",
-       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> OuterStruct(var4=Int8(0), var5=UInt32(0), var6=Float32(0.0),                        </span>│\n",
-       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\">                           </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> var7=InnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@')))                         </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> OuterStruct(var4=Int8(0), var5=UInt32(0), var6=Float32(0.0),                        </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\">                           </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> var7=InnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@')))                         </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                              </span>│\n",
+       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 11                                                                                  </span>│\n",
+       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> OuterStruct(var3=Int8(0), var4=UInt32(0), var5=Float32(0.0),                        </span>│\n",
+       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\">                           </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> var6=InnerStruct(byte_order=b'@',data=bytearray(b'\\x00\\x00')))                      </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> OuterStruct(byte_order=b'@',data=bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\… </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                          </span>│\n",
        "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
@@ -727,12 +725,11 @@
        "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mTrue                                                                               \u001b[0m\u001b[92m \u001b[0m│\n",
        "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mFalse                                                                              \u001b[0m\u001b[93m \u001b[0m│\n",
        "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mOuterStruct -> object                                                              \u001b[0m\u001b[94m \u001b[0m│\n",
-       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m10                                                                                 \u001b[0m\u001b[95m \u001b[0m│\n",
-       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mOuterStruct(var4=Int8(0), var5=UInt32(0), var6=Float32(0.0),                       \u001b[0m\u001b[96m \u001b[0m│\n",
-       "│\u001b[96m                           \u001b[0m│\u001b[96m \u001b[0m\u001b[96mvar7=InnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@')))                        \u001b[0m\u001b[96m \u001b[0m│\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mOuterStruct(var4=Int8(0), var5=UInt32(0), var6=Float32(0.0),                       \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[90m                           \u001b[0m│\u001b[90m \u001b[0m\u001b[90mvar7=InnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@')))                        \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                             \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m11                                                                                 \u001b[0m\u001b[95m \u001b[0m│\n",
+       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mOuterStruct(var3=Int8(0), var4=UInt32(0), var5=Float32(0.0),                       \u001b[0m\u001b[96m \u001b[0m│\n",
+       "│\u001b[96m                           \u001b[0m│\u001b[96m \u001b[0m\u001b[96mvar6=InnerStruct(byte_order=b'@',data=bytearray(b'\\x00\\x00')))                     \u001b[0m\u001b[96m \u001b[0m│\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mOuterStruct(byte_order=b'@',data=bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\…\u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')                         \u001b[0m\u001b[91m \u001b[0m│\n",
        "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
@@ -746,7 +743,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 68,
    "metadata": {},
    "outputs": [
     {
@@ -755,7 +752,7 @@
        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">00 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">00 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">00</span>                   │\n",
+       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">00 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">00 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">00 00</span>                │\n",
        "╰──────────────────────────────────────────────────────╯\n",
        "</pre>\n"
       ],
@@ -763,7 +760,7 @@
        "╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90m00\u001b[0m\u001b[37m|\u001b[0m\u001b[91m00 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[92m00 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[93m00\u001b[0m                   │\n",
+       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90m00\u001b[0m\u001b[37m|\u001b[0m\u001b[91m00 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[92m00 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[93m00 00\u001b[0m                │\n",
        "╰──────────────────────────────────────────────────────╯\n"
       ]
      },
@@ -773,27 +770,27 @@
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                              Legend                              </span>\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                 </span>┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var4  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> 0                                                     </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var5  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 0                                                     </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var6  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> 0.0                                                   </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var7  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@')) </span>│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                            Legend                                             </span>\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                                              </span>┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var3  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> 0                                                                                  </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var4  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 0                                                                                  </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var5  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> 0.0                                                                                </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var6  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var1=BitField(data=b'\\x00'), var2=Byte(data=b'\\x00', byte_order=b'@')) </span>│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m                              Legend                              \u001b[0m\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mvar4  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m0                                                    \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mvar5  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m0                                                    \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mvar6  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m0.0                                                  \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mvar7  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n"
+       "\u001b[3m                                            Legend                                             \u001b[0m\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                             \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mvar3  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m0                                                                                 \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mvar4  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m0                                                                                 \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mvar5  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m0.0                                                                               \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mvar6  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var1=BitField(data=b'\\x00'), var2=Byte(data=b'\\x00', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -813,7 +810,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 69,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -822,7 +819,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 70,
    "metadata": {},
    "outputs": [
     {
@@ -831,7 +828,7 @@
        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">01</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">00 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">00 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">00</span>                   │\n",
+       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">01 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">00 00 00 00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">00 00</span>                │\n",
        "╰──────────────────────────────────────────────────────╯\n",
        "</pre>\n"
       ],
@@ -839,7 +836,7 @@
        "╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90m01\u001b[0m\u001b[37m|\u001b[0m\u001b[91m00 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[92m00 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[93m00\u001b[0m                   │\n",
+       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90m00\u001b[0m\u001b[37m|\u001b[0m\u001b[91m01 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[92m00 00 00 00\u001b[0m\u001b[37m|\u001b[0m\u001b[93m00 00\u001b[0m                │\n",
        "╰──────────────────────────────────────────────────────╯\n"
       ]
      },
@@ -849,27 +846,27 @@
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                              Legend                              </span>\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                 </span>┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var4  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> 1                                                     </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var5  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 0                                                     </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var6  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> 0.0                                                   </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var7  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@')) </span>│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                            Legend                                             </span>\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                                              </span>┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var3  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> 0                                                                                  </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var4  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 1                                                                                  </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var5  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> 0.0                                                                                </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var6  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var1=BitField(data=b'\\x00'), var2=Byte(data=b'\\x00', byte_order=b'@')) </span>│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m                              Legend                              \u001b[0m\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mvar4  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m1                                                    \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mvar5  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m0                                                    \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mvar6  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m0.0                                                  \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mvar7  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var2=Byte(data=b'\\x00', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n"
+       "\u001b[3m                                            Legend                                             \u001b[0m\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                             \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mvar3  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m0                                                                                 \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mvar4  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m1                                                                                 \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mvar5  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m0.0                                                                               \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mvar6  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var1=BitField(data=b'\\x00'), var2=Byte(data=b'\\x00', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -882,7 +879,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 71,
    "metadata": {},
    "outputs": [
     {
@@ -891,7 +888,7 @@
        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">00</span>                                              │\n",
+       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">00</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">00</span>                                           │\n",
        "╰──────────────────────────────────────────────────────╯\n",
        "</pre>\n"
       ],
@@ -899,7 +896,7 @@
        "╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90m00\u001b[0m                                              │\n",
+       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90m00\u001b[0m\u001b[37m|\u001b[0m\u001b[91m00\u001b[0m                                           │\n",
        "╰──────────────────────────────────────────────────────╯\n"
       ]
      },
@@ -909,21 +906,23 @@
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">       Legend       </span>\n",
-       "┏━━━━━━━━┳━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value   </span>┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var2  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> b'\\x00' </span>│\n",
-       "└────────┴─────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                 Legend                  </span>\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                        </span>┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var1  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BitField(00000000, flags={}) </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var2  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> b'\\x00'                      </span>│\n",
+       "└────────┴──────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m       Legend       \u001b[0m\n",
-       "┏━━━━━━━━┳━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue  \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mvar2  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mb'\\x00'\u001b[0m\u001b[90m \u001b[0m│\n",
-       "└────────┴─────────┘\n"
+       "\u001b[3m                 Legend                  \u001b[0m\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                       \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mvar1  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBitField(00000000, flags={})\u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mvar2  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mb'\\x00'                     \u001b[0m\u001b[91m \u001b[0m│\n",
+       "└────────┴──────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -931,7 +930,7 @@
     }
    ],
    "source": [
-    "byteclass_inspect(nested_struct.var7)"
+    "byteclass_inspect(nested_struct.var6)"
    ]
   },
   {
@@ -943,16 +942,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 72,
    "metadata": {},
    "outputs": [],
    "source": [
-    "nested_struct.data = b\"\\xf9\\xf8\\xf7\\xf6\\xf5\\xf4\\xf3\\xf2\\xf1\\xf0\""
+    "nested_struct.data = b\"\\xfa\\xf9\\xf8\\xf7\\xf6\\xf5\\xf4\\xf3\\xf2\\xf1\\xf0\""
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 73,
    "metadata": {},
    "outputs": [
     {
@@ -961,7 +960,7 @@
        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">f9</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">f8 f7 f6 f5</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">f4 f3 f2 f1</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">f0</span>                   │\n",
+       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">fa</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">f9 f8 f7 f6</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">f5 f4 f3 f2</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">f1 f0</span>                │\n",
        "╰──────────────────────────────────────────────────────╯\n",
        "</pre>\n"
       ],
@@ -969,7 +968,7 @@
        "╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90mf9\u001b[0m\u001b[37m|\u001b[0m\u001b[91mf8 f7 f6 f5\u001b[0m\u001b[37m|\u001b[0m\u001b[92mf4 f3 f2 f1\u001b[0m\u001b[37m|\u001b[0m\u001b[93mf0\u001b[0m                   │\n",
+       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90mfa\u001b[0m\u001b[37m|\u001b[0m\u001b[91mf9 f8 f7 f6\u001b[0m\u001b[37m|\u001b[0m\u001b[92mf5 f4 f3 f2\u001b[0m\u001b[37m|\u001b[0m\u001b[93mf1 f0\u001b[0m                │\n",
        "╰──────────────────────────────────────────────────────╯\n"
       ]
      },
@@ -979,27 +978,27 @@
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                              Legend                              </span>\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                 </span>┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var4  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> -7                                                    </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var5  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 4126603256                                            </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var6  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> -2.4060893954673178e+30                               </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var7  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var2=Byte(data=b'\\xf0', byte_order=b'@')) </span>│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                            Legend                                             </span>\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                                              </span>┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var3  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> -6                                                                                 </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var4  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 4143446265                                                                         </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var5  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> -9.664127010094224e+30                                                             </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var6  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var1=BitField(data=b'\\xf1'), var2=Byte(data=b'\\xf0', byte_order=b'@')) </span>│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m                              Legend                              \u001b[0m\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mvar4  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m-7                                                   \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mvar5  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m4126603256                                           \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mvar6  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m-2.4060893954673178e+30                              \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mvar7  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var2=Byte(data=b'\\xf0', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n"
+       "\u001b[3m                                            Legend                                             \u001b[0m\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                             \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mvar3  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m-6                                                                                \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mvar4  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m4143446265                                                                        \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mvar5  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m-9.664127010094224e+30                                                            \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mvar6  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var1=BitField(data=b'\\xf1'), var2=Byte(data=b'\\xf0', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -1019,7 +1018,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 74,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1028,7 +1027,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 75,
    "metadata": {},
    "outputs": [
     {
@@ -1037,7 +1036,7 @@
        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">f9</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">f8 08 08 08</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">f4 f3 f2 f1</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">f0</span>                   │\n",
+       "│ 0x0 <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #808080; text-decoration-color: #808080\">fa</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ff0000; text-decoration-color: #ff0000\">f9 08 08 08</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\">f5 f4 f3 f2</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">|</span><span style=\"color: #ffff00; text-decoration-color: #ffff00\">f1 f0</span>                │\n",
        "╰──────────────────────────────────────────────────────╯\n",
        "</pre>\n"
       ],
@@ -1045,7 +1044,7 @@
        "╭───────────────── Byteclass Inspect ──────────────────╮\n",
        "│      00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f │\n",
        "│ ---------------------------------------------------- │\n",
-       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90mf9\u001b[0m\u001b[37m|\u001b[0m\u001b[91mf8 08 08 08\u001b[0m\u001b[37m|\u001b[0m\u001b[92mf4 f3 f2 f1\u001b[0m\u001b[37m|\u001b[0m\u001b[93mf0\u001b[0m                   │\n",
+       "│ 0x0 \u001b[37m|\u001b[0m\u001b[90mfa\u001b[0m\u001b[37m|\u001b[0m\u001b[91mf9 08 08 08\u001b[0m\u001b[37m|\u001b[0m\u001b[92mf5 f4 f3 f2\u001b[0m\u001b[37m|\u001b[0m\u001b[93mf1 f0\u001b[0m                │\n",
        "╰──────────────────────────────────────────────────────╯\n"
       ]
      },
@@ -1055,27 +1054,27 @@
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                              Legend                              </span>\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                 </span>┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var4  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> -7                                                    </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var5  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 134744312                                             </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var6  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> -2.4060893954673178e+30                               </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var7  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var2=Byte(data=b'\\xf0', byte_order=b'@')) </span>│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                            Legend                                             </span>\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Member </span>┃<span style=\"font-weight: bold\"> Value                                                                              </span>┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">var3  </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> -6                                                                                 </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">var4  </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> 134744313                                                                          </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">var5  </span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> -9.664127010094224e+30                                                             </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">var6  </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> InnerStruct(var1=BitField(data=b'\\xf1'), var2=Byte(data=b'\\xf0', byte_order=b'@')) </span>│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m                              Legend                              \u001b[0m\n",
-       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mvar4  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m-7                                                   \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mvar5  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m134744312                                            \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mvar6  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m-2.4060893954673178e+30                              \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mvar7  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var2=Byte(data=b'\\xf0', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
-       "└────────┴───────────────────────────────────────────────────────┘\n"
+       "\u001b[3m                                            Legend                                             \u001b[0m\n",
+       "┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mMember\u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                                             \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mvar3  \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90m-6                                                                                \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mvar4  \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91m134744313                                                                         \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mvar5  \u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92m-9.664127010094224e+30                                                            \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mvar6  \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mInnerStruct(var1=BitField(data=b'\\xf1'), var2=Byte(data=b'\\xf0', byte_order=b'@'))\u001b[0m\u001b[93m \u001b[0m│\n",
+       "└────────┴────────────────────────────────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
diff --git a/docs/examples/basic/union.ipynb b/docs/examples/basic/union.ipynb
index 5bd270f..c969954 100644
--- a/docs/examples/basic/union.ipynb
+++ b/docs/examples/basic/union.ipynb
@@ -48,37 +48,37 @@
     {
      "data": {
       "text/html": [
-       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                             Byteclass Info                              </span>\n",
-       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                     </span>┃\n",
-       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicUnion                                </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                      </span>│\n",
-       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> True                                      </span>│\n",
-       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> False                                     </span>│\n",
-       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> BasicUnion -&gt; object                      </span>│\n",
-       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 2                                         </span>│\n",
-       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> BasicUnion(var1=UInt8(0), var2=UInt16(0)) </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicUnion(var1=UInt8(0), var2=UInt16(0)) </span>│\n",
-       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x00')                    </span>│\n",
-       "└───────────────────────────┴───────────────────────────────────────────┘\n",
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-style: italic\">                                    Byteclass Info                                     </span>\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Property                  </span>┃<span style=\"font-weight: bold\"> Value                                                   </span>┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">type()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicUnion                                              </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">is_byteclass()           </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> True                                                    </span>│\n",
+       "│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span><span style=\"color: #00ff00; text-decoration-color: #00ff00; font-weight: bold\">is_byteclass_collection()</span><span style=\"color: #00ff00; text-decoration-color: #00ff00\"> </span>│<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> True                                                    </span>│\n",
+       "│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span><span style=\"color: #ffff00; text-decoration-color: #ffff00; font-weight: bold\">is_byteclass_primitive() </span><span style=\"color: #ffff00; text-decoration-color: #ffff00\"> </span>│<span style=\"color: #ffff00; text-decoration-color: #ffff00\"> False                                                   </span>│\n",
+       "│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span><span style=\"color: #0000ff; text-decoration-color: #0000ff; font-weight: bold\">mro                      </span><span style=\"color: #0000ff; text-decoration-color: #0000ff\"> </span>│<span style=\"color: #0000ff; text-decoration-color: #0000ff\"> BasicUnion -&gt; object                                    </span>│\n",
+       "│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">len()                    </span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> </span>│<span style=\"color: #ff00ff; text-decoration-color: #ff00ff\"> 2                                                       </span>│\n",
+       "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span><span style=\"color: #00ffff; text-decoration-color: #00ffff; font-weight: bold\">str()                    </span><span style=\"color: #00ffff; text-decoration-color: #00ffff\"> </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> BasicUnion(var1=UInt8(0), var2=UInt16(0))               </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> BasicUnion(byte_order=b'@',data=bytearray(b'\\x00\\x00')) </span>│\n",
+       "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'\\x00\\x00')                                  </span>│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────┘\n",
        "</pre>\n"
       ],
       "text/plain": [
-       "\u001b[3m                             Byteclass Info                              \u001b[0m\n",
-       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
-       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                    \u001b[0m\u001b[1m \u001b[0m┃\n",
-       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicUnion                               \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                     \u001b[0m\u001b[91m \u001b[0m│\n",
-       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mTrue                                     \u001b[0m\u001b[92m \u001b[0m│\n",
-       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mFalse                                    \u001b[0m\u001b[93m \u001b[0m│\n",
-       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mBasicUnion -> object                     \u001b[0m\u001b[94m \u001b[0m│\n",
-       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m2                                        \u001b[0m\u001b[95m \u001b[0m│\n",
-       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mBasicUnion(var1=UInt8(0), var2=UInt16(0))\u001b[0m\u001b[96m \u001b[0m│\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicUnion(var1=UInt8(0), var2=UInt16(0))\u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x00')                   \u001b[0m\u001b[91m \u001b[0m│\n",
-       "└───────────────────────────┴───────────────────────────────────────────┘\n"
+       "\u001b[3m                                    Byteclass Info                                     \u001b[0m\n",
+       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mProperty                 \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mValue                                                  \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mtype()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicUnion                                             \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91mis_byteclass()           \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mTrue                                                   \u001b[0m\u001b[91m \u001b[0m│\n",
+       "│\u001b[92m \u001b[0m\u001b[1;92mis_byteclass_collection()\u001b[0m\u001b[92m \u001b[0m│\u001b[92m \u001b[0m\u001b[92mTrue                                                   \u001b[0m\u001b[92m \u001b[0m│\n",
+       "│\u001b[93m \u001b[0m\u001b[1;93mis_byteclass_primitive() \u001b[0m\u001b[93m \u001b[0m│\u001b[93m \u001b[0m\u001b[93mFalse                                                  \u001b[0m\u001b[93m \u001b[0m│\n",
+       "│\u001b[94m \u001b[0m\u001b[1;94mmro                      \u001b[0m\u001b[94m \u001b[0m│\u001b[94m \u001b[0m\u001b[94mBasicUnion -> object                                   \u001b[0m\u001b[94m \u001b[0m│\n",
+       "│\u001b[95m \u001b[0m\u001b[1;95mlen()                    \u001b[0m\u001b[95m \u001b[0m│\u001b[95m \u001b[0m\u001b[95m2                                                      \u001b[0m\u001b[95m \u001b[0m│\n",
+       "│\u001b[96m \u001b[0m\u001b[1;96mstr()                    \u001b[0m\u001b[96m \u001b[0m│\u001b[96m \u001b[0m\u001b[96mBasicUnion(var1=UInt8(0), var2=UInt16(0))              \u001b[0m\u001b[96m \u001b[0m│\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mBasicUnion(byte_order=b'@',data=bytearray(b'\\x00\\x00'))\u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'\\x00\\x00')                                 \u001b[0m\u001b[91m \u001b[0m│\n",
+       "└───────────────────────────┴─────────────────────────────────────────────────────────┘\n"
       ]
      },
      "metadata": {},
@@ -170,7 +170,7 @@
     "    int16: Int16\n",
     "    uint8: UInt8\n",
     "    int8: Int8\n",
-    "    string: String = member(default_factory=lambda: String(64, value=\"The quick brown fox jumped over the lazy dog.\"))\n",
+    "    string: String = member(factory=lambda byte_order: String(64, value=\"The quick brown fox jumped over the lazy dog.\"))\n",
     "\n",
     "\n",
     "lu: FixedSizeCollection = LargeUnion()\n",
@@ -204,10 +204,9 @@
        "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\">                           </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> uint16=UInt16(16400), int16=Int16(16400), uint8=UInt8(64), int8=Int8(64),           </span>│\n",
        "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\">                           </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> string=String(64, value='@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown fox jumped over the   </span>│\n",
        "│<span style=\"color: #00ffff; text-decoration-color: #00ffff\">                           </span>│<span style=\"color: #00ffff; text-decoration-color: #00ffff\"> lazy dog.'))                                                                        </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> LargeUnion(uint64=UInt64(4616189635234627586), uint32=UInt32(1074790404),           </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\">                           </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> uint16=UInt16(16400), int16=Int16(16400), uint8=UInt8(64), int8=Int8(64),           </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\">                           </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> string=String(64, value='@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown fox jumped over the   </span>│\n",
-       "│<span style=\"color: #808080; text-decoration-color: #808080\">                           </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> lazy dog.'))                                                                        </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\"> </span><span style=\"color: #808080; text-decoration-color: #808080; font-weight: bold\">repr()                   </span><span style=\"color: #808080; text-decoration-color: #808080\"> </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> LargeUnion(byte_order=b'&gt;',data=bytearray(b'@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown    </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\">                           </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> fox jumped over the lazy                                                            </span>│\n",
+       "│<span style=\"color: #808080; text-decoration-color: #808080\">                           </span>│<span style=\"color: #808080; text-decoration-color: #808080\"> dog.\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')) </span>│\n",
        "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span><span style=\"color: #ff0000; text-decoration-color: #ff0000; font-weight: bold\">.data                    </span><span style=\"color: #ff0000; text-decoration-color: #ff0000\"> </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> bytearray(b'@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown fox jumped over the lazy           </span>│\n",
        "│<span style=\"color: #ff0000; text-decoration-color: #ff0000\">                           </span>│<span style=\"color: #ff0000; text-decoration-color: #ff0000\"> dog.\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')  </span>│\n",
        "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n",
@@ -228,10 +227,9 @@
        "│\u001b[96m                           \u001b[0m│\u001b[96m \u001b[0m\u001b[96muint16=UInt16(16400), int16=Int16(16400), uint8=UInt8(64), int8=Int8(64),          \u001b[0m\u001b[96m \u001b[0m│\n",
        "│\u001b[96m                           \u001b[0m│\u001b[96m \u001b[0m\u001b[96mstring=String(64, value='@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown fox jumped over the  \u001b[0m\u001b[96m \u001b[0m│\n",
        "│\u001b[96m                           \u001b[0m│\u001b[96m \u001b[0m\u001b[96mlazy dog.'))                                                                       \u001b[0m\u001b[96m \u001b[0m│\n",
-       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mLargeUnion(uint64=UInt64(4616189635234627586), uint32=UInt32(1074790404),          \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[90m                           \u001b[0m│\u001b[90m \u001b[0m\u001b[90muint16=UInt16(16400), int16=Int16(16400), uint8=UInt8(64), int8=Int8(64),          \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[90m                           \u001b[0m│\u001b[90m \u001b[0m\u001b[90mstring=String(64, value='@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown fox jumped over the  \u001b[0m\u001b[90m \u001b[0m│\n",
-       "│\u001b[90m                           \u001b[0m│\u001b[90m \u001b[0m\u001b[90mlazy dog.'))                                                                       \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[90m \u001b[0m\u001b[1;90mrepr()                   \u001b[0m\u001b[90m \u001b[0m│\u001b[90m \u001b[0m\u001b[90mLargeUnion(byte_order=b'>',data=bytearray(b'@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown   \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[90m                           \u001b[0m│\u001b[90m \u001b[0m\u001b[90mfox jumped over the lazy                                                           \u001b[0m\u001b[90m \u001b[0m│\n",
+       "│\u001b[90m                           \u001b[0m│\u001b[90m \u001b[0m\u001b[90mdog.\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'))\u001b[0m\u001b[90m \u001b[0m│\n",
        "│\u001b[91m \u001b[0m\u001b[1;91m.data                    \u001b[0m\u001b[91m \u001b[0m│\u001b[91m \u001b[0m\u001b[91mbytearray(b'@\\x10\\x00\\x04\\x00\\x00\\x00\\x02k brown fox jumped over the lazy          \u001b[0m\u001b[91m \u001b[0m│\n",
        "│\u001b[91m                           \u001b[0m│\u001b[91m \u001b[0m\u001b[91mdog.\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00') \u001b[0m\u001b[91m \u001b[0m│\n",
        "└───────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘\n"
diff --git a/docs/examples/executables/elf.ipynb b/docs/examples/executables/elf.ipynb
index b9ba082..f6c65be 100644
--- a/docs/examples/executables/elf.ipynb
+++ b/docs/examples/executables/elf.ipynb
@@ -24,7 +24,20 @@
    "cell_type": "code",
    "execution_count": 2,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "ename": "TypeError",
+     "evalue": "ElfHdr64.<lambda>() got an unexpected keyword argument 'byte_order'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[2], line 3\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m../../../tests/data/hello_world.elf\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m file:\n\u001b[1;32m      2\u001b[0m     data \u001b[38;5;241m=\u001b[39m file\u001b[38;5;241m.\u001b[39mread()\n\u001b[0;32m----> 3\u001b[0m elf64_hdr \u001b[38;5;241m=\u001b[39m \u001b[43mElfHdr64\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m      4\u001b[0m elf64_hdr\u001b[38;5;241m.\u001b[39mattach(\u001b[38;5;28mmemoryview\u001b[39m(data))\n",
+      "File \u001b[0;32m<string>:6\u001b[0m, in \u001b[0;36m__init__\u001b[0;34m(self, data, byte_order)\u001b[0m\n",
+      "\u001b[0;31mTypeError\u001b[0m: ElfHdr64.<lambda>() got an unexpected keyword argument 'byte_order'"
+     ]
+    }
+   ],
    "source": [
     "with open(\"../../../tests/data/hello_world.elf\", \"rb\") as file:\n",
     "    data = file.read()\n",
@@ -34,7 +47,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -89,7 +102,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -173,7 +186,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -234,7 +247,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -243,7 +256,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -327,7 +340,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -388,7 +401,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
diff --git a/poetry.lock b/poetry.lock
index 1b2bb5b..6209480 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -134,33 +134,23 @@ lxml = ["lxml"]
 
 [[package]]
 name = "black"
-version = "24.4.0"
+version = "24.4.2"
 description = "The uncompromising code formatter."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"},
-    {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"},
-    {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"},
-    {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"},
-    {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"},
-    {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"},
-    {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"},
-    {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"},
-    {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"},
-    {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"},
-    {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"},
-    {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"},
-    {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"},
-    {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"},
-    {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"},
-    {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"},
-    {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"},
-    {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"},
-    {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"},
-    {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"},
-    {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"},
-    {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"},
+    {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"},
+    {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"},
+    {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"},
+    {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"},
+    {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"},
+    {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"},
+    {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"},
+    {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"},
+    {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"},
+    {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"},
+    {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"},
+    {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"},
 ]
 
 [package.dependencies]
@@ -486,63 +476,63 @@ test = ["pytest"]
 
 [[package]]
 name = "coverage"
-version = "7.4.4"
+version = "7.5.0"
 description = "Code coverage measurement for Python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"},
-    {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"},
-    {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"},
-    {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"},
-    {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"},
-    {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"},
-    {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"},
-    {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"},
-    {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"},
-    {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"},
-    {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"},
-    {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"},
-    {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"},
-    {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"},
-    {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"},
-    {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"},
-    {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"},
-    {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"},
-    {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"},
-    {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"},
-    {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"},
-    {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"},
-    {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"},
-    {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"},
-    {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"},
-    {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"},
-    {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"},
-    {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"},
-    {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"},
-    {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"},
-    {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"},
-    {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"},
-    {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"},
-    {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"},
-    {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"},
-    {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"},
-    {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"},
-    {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"},
-    {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"},
-    {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"},
-    {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"},
-    {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"},
-    {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"},
-    {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"},
-    {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"},
-    {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"},
-    {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"},
-    {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"},
-    {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"},
-    {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"},
-    {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"},
-    {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"},
+    {file = "coverage-7.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:432949a32c3e3f820af808db1833d6d1631664d53dd3ce487aa25d574e18ad1c"},
+    {file = "coverage-7.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bd7065249703cbeb6d4ce679c734bef0ee69baa7bff9724361ada04a15b7e3b"},
+    {file = "coverage-7.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbfe6389c5522b99768a93d89aca52ef92310a96b99782973b9d11e80511f932"},
+    {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39793731182c4be939b4be0cdecde074b833f6171313cf53481f869937129ed3"},
+    {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a5dbe1ba1bf38d6c63b6d2c42132d45cbee6d9f0c51b52c59aa4afba057517"},
+    {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:357754dcdfd811462a725e7501a9b4556388e8ecf66e79df6f4b988fa3d0b39a"},
+    {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a81eb64feded34f40c8986869a2f764f0fe2db58c0530d3a4afbcde50f314880"},
+    {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51431d0abbed3a868e967f8257c5faf283d41ec882f58413cf295a389bb22e58"},
+    {file = "coverage-7.5.0-cp310-cp310-win32.whl", hash = "sha256:f609ebcb0242d84b7adeee2b06c11a2ddaec5464d21888b2c8255f5fd6a98ae4"},
+    {file = "coverage-7.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:6782cd6216fab5a83216cc39f13ebe30adfac2fa72688c5a4d8d180cd52e8f6a"},
+    {file = "coverage-7.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e768d870801f68c74c2b669fc909839660180c366501d4cc4b87efd6b0eee375"},
+    {file = "coverage-7.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84921b10aeb2dd453247fd10de22907984eaf80901b578a5cf0bb1e279a587cb"},
+    {file = "coverage-7.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710c62b6e35a9a766b99b15cdc56d5aeda0914edae8bb467e9c355f75d14ee95"},
+    {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c379cdd3efc0658e652a14112d51a7668f6bfca7445c5a10dee7eabecabba19d"},
+    {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea9d3ca80bcf17edb2c08a4704259dadac196fe5e9274067e7a20511fad1743"},
+    {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:41327143c5b1d715f5f98a397608f90ab9ebba606ae4e6f3389c2145410c52b1"},
+    {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:565b2e82d0968c977e0b0f7cbf25fd06d78d4856289abc79694c8edcce6eb2de"},
+    {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf3539007202ebfe03923128fedfdd245db5860a36810136ad95a564a2fdffff"},
+    {file = "coverage-7.5.0-cp311-cp311-win32.whl", hash = "sha256:bf0b4b8d9caa8d64df838e0f8dcf68fb570c5733b726d1494b87f3da85db3a2d"},
+    {file = "coverage-7.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c6384cc90e37cfb60435bbbe0488444e54b98700f727f16f64d8bfda0b84656"},
+    {file = "coverage-7.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fed7a72d54bd52f4aeb6c6e951f363903bd7d70bc1cad64dd1f087980d309ab9"},
+    {file = "coverage-7.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cbe6581fcff7c8e262eb574244f81f5faaea539e712a058e6707a9d272fe5b64"},
+    {file = "coverage-7.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad97ec0da94b378e593ef532b980c15e377df9b9608c7c6da3506953182398af"},
+    {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4bacd62aa2f1a1627352fe68885d6ee694bdaebb16038b6e680f2924a9b2cc"},
+    {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf032b6c105881f9d77fa17d9eebe0ad1f9bfb2ad25777811f97c5362aa07f2"},
+    {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ba01d9ba112b55bfa4b24808ec431197bb34f09f66f7cb4fd0258ff9d3711b1"},
+    {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f0bfe42523893c188e9616d853c47685e1c575fe25f737adf473d0405dcfa7eb"},
+    {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a9a7ef30a1b02547c1b23fa9a5564f03c9982fc71eb2ecb7f98c96d7a0db5cf2"},
+    {file = "coverage-7.5.0-cp312-cp312-win32.whl", hash = "sha256:3c2b77f295edb9fcdb6a250f83e6481c679335ca7e6e4a955e4290350f2d22a4"},
+    {file = "coverage-7.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:427e1e627b0963ac02d7c8730ca6d935df10280d230508c0ba059505e9233475"},
+    {file = "coverage-7.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dd88fce54abbdbf4c42fb1fea0e498973d07816f24c0e27a1ecaf91883ce69e"},
+    {file = "coverage-7.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a898c11dca8f8c97b467138004a30133974aacd572818c383596f8d5b2eb04a9"},
+    {file = "coverage-7.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07dfdd492d645eea1bd70fb1d6febdcf47db178b0d99161d8e4eed18e7f62fe7"},
+    {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3d117890b6eee85887b1eed41eefe2e598ad6e40523d9f94c4c4b213258e4a4"},
+    {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6afd2e84e7da40fe23ca588379f815fb6dbbb1b757c883935ed11647205111cb"},
+    {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9960dd1891b2ddf13a7fe45339cd59ecee3abb6b8326d8b932d0c5da208104f"},
+    {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ced268e82af993d7801a9db2dbc1d2322e786c5dc76295d8e89473d46c6b84d4"},
+    {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7c211f25777746d468d76f11719e64acb40eed410d81c26cefac641975beb88"},
+    {file = "coverage-7.5.0-cp38-cp38-win32.whl", hash = "sha256:262fffc1f6c1a26125d5d573e1ec379285a3723363f3bd9c83923c9593a2ac25"},
+    {file = "coverage-7.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:eed462b4541c540d63ab57b3fc69e7d8c84d5957668854ee4e408b50e92ce26a"},
+    {file = "coverage-7.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0194d654e360b3e6cc9b774e83235bae6b9b2cac3be09040880bb0e8a88f4a1"},
+    {file = "coverage-7.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33c020d3322662e74bc507fb11488773a96894aa82a622c35a5a28673c0c26f5"},
+    {file = "coverage-7.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbdf2cae14a06827bec50bd58e49249452d211d9caddd8bd80e35b53cb04631"},
+    {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3235d7c781232e525b0761730e052388a01548bd7f67d0067a253887c6e8df46"},
+    {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2de4e546f0ec4b2787d625e0b16b78e99c3e21bc1722b4977c0dddf11ca84e"},
+    {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0e206259b73af35c4ec1319fd04003776e11e859936658cb6ceffdeba0f5be"},
+    {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2055c4fb9a6ff624253d432aa471a37202cd8f458c033d6d989be4499aed037b"},
+    {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075299460948cd12722a970c7eae43d25d37989da682997687b34ae6b87c0ef0"},
+    {file = "coverage-7.5.0-cp39-cp39-win32.whl", hash = "sha256:280132aada3bc2f0fac939a5771db4fbb84f245cb35b94fae4994d4c1f80dae7"},
+    {file = "coverage-7.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:c58536f6892559e030e6924896a44098bc1290663ea12532c78cef71d0df8493"},
+    {file = "coverage-7.5.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:2b57780b51084d5223eee7b59f0d4911c31c16ee5aa12737c7a02455829ff067"},
+    {file = "coverage-7.5.0.tar.gz", hash = "sha256:cf62d17310f34084c59c01e027259076479128d11e4661bb6c9acb38c5e19bb8"},
 ]
 
 [package.dependencies]
@@ -1612,38 +1602,38 @@ files = [
 
 [[package]]
 name = "mypy"
-version = "1.9.0"
+version = "1.10.0"
 description = "Optional static typing for Python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"},
-    {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"},
-    {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"},
-    {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"},
-    {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"},
-    {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"},
-    {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"},
-    {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"},
-    {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"},
-    {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"},
-    {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"},
-    {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"},
-    {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"},
-    {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"},
-    {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"},
-    {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"},
-    {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"},
-    {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"},
-    {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"},
-    {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"},
-    {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"},
-    {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"},
-    {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"},
-    {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"},
-    {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"},
-    {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"},
-    {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"},
+    {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"},
+    {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"},
+    {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"},
+    {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"},
+    {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"},
+    {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"},
+    {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"},
+    {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"},
+    {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"},
+    {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"},
+    {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"},
+    {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"},
+    {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"},
+    {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"},
+    {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"},
+    {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"},
+    {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"},
+    {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"},
+    {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"},
+    {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"},
+    {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"},
+    {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"},
+    {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"},
+    {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"},
+    {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"},
+    {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"},
+    {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"},
 ]
 
 [package.dependencies]
@@ -1907,28 +1897,29 @@ testing = ["pytest", "pytest-cov", "wheel"]
 
 [[package]]
 name = "platformdirs"
-version = "4.2.0"
-description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+version = "4.2.1"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"},
-    {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"},
+    {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"},
+    {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"},
 ]
 
 [package.extras]
 docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
 test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
+type = ["mypy (>=1.8)"]
 
 [[package]]
 name = "pluggy"
-version = "1.4.0"
+version = "1.5.0"
 description = "plugin and hook calling mechanisms for python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"},
-    {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"},
+    {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
+    {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
 ]
 
 [package.extras]
@@ -2532,13 +2523,13 @@ full = ["numpy"]
 
 [[package]]
 name = "referencing"
-version = "0.34.0"
+version = "0.35.0"
 description = "JSON Referencing + Python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"},
-    {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"},
+    {file = "referencing-0.35.0-py3-none-any.whl", hash = "sha256:8080727b30e364e5783152903672df9b6b091c926a146a759080b62ca3126cd6"},
+    {file = "referencing-0.35.0.tar.gz", hash = "sha256:191e936b0c696d0af17ad7430a3dc68e88bc11be6514f4757dc890f04ab05889"},
 ]
 
 [package.dependencies]
@@ -3003,13 +2994,13 @@ files = [
 
 [[package]]
 name = "tinycss2"
-version = "1.2.1"
+version = "1.3.0"
 description = "A tiny CSS parser"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"},
-    {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"},
+    {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"},
+    {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"},
 ]
 
 [package.dependencies]
@@ -3017,7 +3008,7 @@ webencodings = ">=0.4"
 
 [package.extras]
 doc = ["sphinx", "sphinx_rtd_theme"]
-test = ["flake8", "isort", "pytest"]
+test = ["pytest", "ruff"]
 
 [[package]]
 name = "tomli"
@@ -3128,13 +3119,13 @@ zstd = ["zstandard (>=0.18.0)"]
 
 [[package]]
 name = "virtualenv"
-version = "20.25.3"
+version = "20.26.0"
 description = "Virtual Python Environment builder"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "virtualenv-20.25.3-py3-none-any.whl", hash = "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e"},
-    {file = "virtualenv-20.25.3.tar.gz", hash = "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be"},
+    {file = "virtualenv-20.26.0-py3-none-any.whl", hash = "sha256:0846377ea76e818daaa3e00a4365c018bc3ac9760cbb3544de542885aad61fb3"},
+    {file = "virtualenv-20.26.0.tar.gz", hash = "sha256:ec25a9671a5102c8d2657f62792a27b48f016664c6873f6beed3800008577210"},
 ]
 
 [package.dependencies]
diff --git a/pyproject.toml b/pyproject.toml
index c2e6331..f3b90cb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
 
 [tool.poetry]
 name = "byteclasses"
-version = "0.2.0"
+version = "0.5.0"
 description = "A python package designed for creating and managing blobs of binary data using dataclass like structures."
 keywords = ["struct", "structures", "binary", "blobs", "raw", "bytes", "dataclasses"]
 repository = "https://github.com/thetacom/byteclasses"


Test patch:
diff --git a/tests/collections/test_structure.py b/tests/collections/test_structure.py
index 55b5959..2cf590f 100644
--- a/tests/collections/test_structure.py
+++ b/tests/collections/test_structure.py
@@ -1,10 +1,57 @@
 """Test suite for Structure Byteclass."""
 
+import pytest
+
 from byteclasses._enums import ByteOrder
-from byteclasses.types.collections.structure import structure
+from byteclasses.types.collections import member, structure
 from byteclasses.types.primitives.integers import Int16, UInt8, UInt64
 
 
+def test_structure_creation_with_member_default():
+    """Test simple structure creation with member default."""
+
+    with pytest.raises(ValueError):
+
+        @structure
+        class BadStruct:  # pylint: disable=R0903
+            """Test structure class."""
+
+            a: UInt8 = UInt8(1)
+
+        _ = BadStruct()
+
+
+def test_structure_creation_with_member_factory():
+    """Test simple structure creation with member factory."""
+
+    @structure
+    class FactoryStruct:  # pylint: disable=R0903
+        """Factory structure class."""
+
+        a: UInt8 = member(factory=UInt8)
+
+    fs = FactoryStruct()
+
+    assert isinstance(fs, FactoryStruct)
+    assert len(fs) == 1
+
+
+def test_structure_creation_with_lambda_factory():
+    """Test simple structure creation with lambda factory."""
+
+    @structure
+    class LambdaStruct:  # pylint: disable=R0903
+        """Lambda structure class."""
+
+        a: UInt8 = member(factory=lambda byte_order: UInt8(8, byte_order=byte_order))
+
+    ls = LambdaStruct()
+
+    assert isinstance(ls, LambdaStruct)
+    assert len(ls) == 1
+    assert ls.a == 8
+
+
 def test_structure_creation_unpacked():
     """Test simple structure creation."""
 
@@ -12,23 +59,23 @@ def test_structure_creation_unpacked():
     class SimpleStruct:  # pylint: disable=R0903
         """Test structure class."""
 
-        a: UInt8 = UInt8(1)
-        b: Int16 = Int16(2)
-        c: UInt64 = UInt64(3)
+        a: UInt8
+        b: Int16
+        c: UInt64
 
     ss = SimpleStruct()
     assert isinstance(ss, SimpleStruct)
     assert len(ss) == 16
-    assert ss.data == b"\x01\x00\x02\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00"
+    assert ss.data == b"\x00" * len(ss)
     assert ss.a.endianness == ByteOrder.NATIVE.name
-    assert ss.a.data == b"\x01"
-    assert ss.a.value == 1
+    assert ss.a.data == b"\x00"
+    assert ss.a.value == 0
     assert ss.b.endianness == ByteOrder.NATIVE.name
-    assert ss.b.data == b"\x02\x00"
-    assert ss.b.value == 2
+    assert ss.b.data == b"\x00\x00"
+    assert ss.b.value == 0
     assert ss.c.endianness == ByteOrder.NATIVE.name
-    assert ss.c.data == b"\x03\x00\x00\x00\x00\x00\x00\x00"
-    assert ss.c.value == 3
+    assert ss.c.data == b"\x00\x00\x00\x00\x00\x00\x00\x00"
+    assert ss.c.value == 0
 
 
 def test_structure_creation_packed():
@@ -38,20 +85,20 @@ def test_structure_creation_packed():
     class PackedStruct:  # pylint: disable=R0903
         """Test structure class."""
 
-        a: UInt8 = UInt8(1)
-        b: Int16 = Int16(2)
-        c: UInt64 = UInt64(3)
+        a: UInt8
+        b: Int16
+        c: UInt64
 
     ps = PackedStruct()
     assert isinstance(ps, PackedStruct)
     assert len(ps) == 11
-    assert ps.data == b"\x01\x02\x00\x03\x00\x00\x00\x00\x00\x00\x00"
+    assert ps.data == b"\x00" * len(ps)
     assert ps.a.endianness == ByteOrder.NATIVE.name
-    assert ps.a.data == b"\x01"
-    assert ps.a.value == 1
+    assert ps.a.data == b"\x00"
+    assert ps.a.value == 0
     assert ps.b.endianness == ByteOrder.NATIVE.name
-    assert ps.b.data == b"\x02\x00"
-    assert ps.b.value == 2
+    assert ps.b.data == b"\x00\x00"
+    assert ps.b.value == 0
     assert ps.c.endianness == ByteOrder.NATIVE.name
-    assert ps.c.data == b"\x03\x00\x00\x00\x00\x00\x00\x00"
-    assert ps.c.value == 3
+    assert ps.c.data == b"\x00\x00\x00\x00\x00\x00\x00\x00"
+    assert ps.c.value == 0
diff --git a/tests/collections/test_union.py b/tests/collections/test_union.py
index 954b5cb..1907500 100644
--- a/tests/collections/test_union.py
+++ b/tests/collections/test_union.py
@@ -11,10 +11,10 @@ def test_union_init():
     class TestUnion:
         """A test union class."""
 
-        a: UInt64 = UInt64(0)
-        b: UInt32 = UInt32(0)
-        c: UInt16 = UInt16(0)
-        d: UInt8 = UInt8(0)
+        a: UInt64
+        b: UInt32
+        c: UInt16
+        d: UInt8
 
     data = TestUnion()
     assert len(data) == 8