Collections

Here's a spec-class with collections.

from spec_classes import spec_class
from typing import List

@spec_class
class Number:
    einstein_approved: bool = False
    value: int

@spec_class
class FavoriteNumbers:
    numbers: List[Number] = []

We can instantiate it:

FavoriteNumbers()
# FavoriteNumbers(numbers=[])

FavoriteNumbers(numbers=[Number(value=10), Number(value=13, einstein_approved=True)])
# FavoriteNumbers(
#     numbers=[
#         Number(
#             einstein_approved=False,
#             value=10
#         ),
#         Number(
#             einstein_approved=True,
#             value=13
#         )
#     ]
# )

We can extend and mutate it:

(
    FavoriteNumbers()
    .with_number(value=26, einstein_approved=True)
    # FavoriteNumbers(numbers=[Number(einstein_approved=True, value=26)])
    .transform_number(0, value=lambda value: value * 2)
    # FavoriteNumbers(numbers=[Number(einstein_approved=True, value=52)])
    .without_number(0)
)
# FavoriteNumbers(numbers=[])

Similar methods exist for dictionary and set collections also; see Collections Usage.

Back to top