Attribute Concealment¶
Purpose¶
The library SHALL provide mechanisms to conceal non-public attributes from
dir() output, reducing API noise and clearly communicating public interfaces.
Requirements¶
Requirement: Default Visibility Filtering¶
By default, only public attributes (not starting with _) MUST be visible
in dir() output for classes and instances using standard behaviors.
Scenario: Public attributes visible¶
WHEN
dir()is called on a class or instance with standard behaviorsTHEN attributes not starting with
_MUST appear in the result
Scenario: Non-public attributes concealed¶
WHEN
dir()is called on a class or instance with standard behaviorsTHEN attributes starting with
_MUST NOT appear in the result
Scenario: Non-public attributes still accessible¶
WHEN a concealed attribute is accessed directly by name
THEN the attribute MUST be accessible
Requirement: Class Visibility Customization¶
Users MUST be able to specify which class attributes are visible via
class_visibles.
Scenario: Named visible attribute¶
WHEN an attribute name is listed in
class_visiblesTHEN that attribute MUST appear in
dir()even if non-public
Scenario: Non-visible attribute¶
WHEN an attribute name is NOT in
class_visiblesTHEN concealment rules apply normally
Requirement: Instance Visibility Customization¶
Users MUST be able to specify which instance attributes are visible via
instances_visibles.
Scenario: Named visible instance attribute¶
WHEN an attribute name is listed in
instances_visiblesTHEN that attribute MUST appear in
dir()even if non-public
Requirement: Visibility Verifiers¶
Visibility verifiers MUST support names, regexes, and predicates, matching the mutability verifier interface.
Scenario: Regex-based visibility¶
WHEN an attribute name matches a regex in
class_visiblesorinstances_visiblesTHEN that attribute MUST appear in
dir()
Scenario: Predicate-based visibility¶
WHEN a predicate returns
Truefor an attribute nameTHEN that attribute MUST appear in
dir()
Requirement: Wildcard Visibility¶
Users MUST be able to disable concealment entirely using a literal '*'.
Scenario: Wildcard shows all attributes¶
WHEN
class_visiblesorinstances_visiblesis set to'*'THEN all attributes MUST appear in
dir()(Python default behavior)
Requirement: Visibility Verifier Inheritance¶
Visibility verifiers MUST be inherited and composable across class hierarchies.
Scenario: Inherited visibility names¶
WHEN a subclass inherits from a class with custom visibles
THEN the subclass MUST inherit those visible names
Scenario: Composed visibility names¶
WHEN a subclass defines additional visibles
THEN both parent and child visibles MUST be active