Attribute Immutability¶
Purpose¶
The library SHALL provide mechanisms to make class and instance attributes immutable after initialization, with support for selective mutability via names, regexes, or predicates.
Requirements¶
Requirement: Class Attribute Immutability¶
Class attributes produced by standard metaclasses MUST be immutable after class construction completes.
Scenario: Assignment to immutable class attribute¶
WHEN assignment is attempted on a class attribute after construction
THEN
AttributeImmutabilityMUST be raised
Scenario: Deletion of immutable class attribute¶
WHEN deletion is attempted on a class attribute
THEN
AttributeImmutabilityMUST be raised
Requirement: Instance Attribute Immutability¶
Instance attributes of standard classes MUST be immutable after __init__
and __post_init__ complete.
Scenario: Assignment to immutable instance attribute¶
WHEN assignment is attempted on an instance attribute after initialization
THEN
AttributeImmutabilityMUST be raised
Scenario: Deletion of immutable instance attribute¶
WHEN deletion is attempted on an instance attribute
THEN
AttributeImmutabilityMUST be raised
Scenario: Mutability during initialization¶
WHEN attributes are assigned within
__init__or__post_init__THEN assignment MUST succeed
Requirement: Selective Mutability by Name¶
Users MUST be able to specify mutable attributes by exact name.
Scenario: Named mutable attribute¶
WHEN an attribute name is listed in
class_mutablesorinstances_mutablesTHEN that attribute MUST be mutable
Scenario: Non-mutable attribute with name-based exceptions¶
WHEN an attribute name is NOT in the mutables list
THEN immutability MUST be enforced
Requirement: Selective Mutability by Regex¶
Users MUST be able to specify mutable attributes by compiled regex pattern.
Scenario: Regex-matched mutable attribute¶
WHEN an attribute name matches a regex in
class_mutablesorinstances_mutablesTHEN that attribute MUST be mutable
Scenario: Regex non-match¶
WHEN an attribute name does not match any regex
THEN immutability MUST be enforced
Requirement: Selective Mutability by Predicate¶
Users MUST be able to specify mutable attributes by predicate function.
Scenario: Predicate-matched mutable attribute¶
WHEN a predicate function returns
Truefor an attribute nameTHEN that attribute MUST be mutable
Scenario: Predicate non-match¶
WHEN all predicates return
Falsefor an attribute nameTHEN immutability MUST be enforced
Requirement: Wildcard Mutability¶
Users MUST be able to disable immutability entirely using a literal '*'.
Scenario: Wildcard disables immutability¶
WHEN
class_mutablesorinstances_mutablesis set to'*'THEN all attributes of that level MUST be mutable
Requirement: Mutability Verifier Inheritance¶
Mutability verifiers (names, regexes, predicates) MUST be inherited and composable across class hierarchies.
Scenario: Inherited mutability names¶
WHEN a subclass inherits from a class with named mutables
THEN the subclass MUST inherit those mutable names
Scenario: Composed mutability names¶
WHEN a subclass defines additional mutables
THEN both parent and child mutables MUST be active