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 behaviors

  • THEN 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 behaviors

  • THEN 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_visibles

  • THEN that attribute MUST appear in dir() even if non-public

Scenario: Non-visible attribute

  • WHEN an attribute name is NOT in class_visibles

  • THEN 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_visibles

  • THEN 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_visibles or instances_visibles

  • THEN that attribute MUST appear in dir()

Scenario: Predicate-based visibility

  • WHEN a predicate returns True for an attribute name

  • THEN 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_visibles or instances_visibles is 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