Protocol Support¶
Purpose¶
The library SHALL provide protocol classes with immutability and concealment that work with structural subtyping, preserving protocol functionality including runtime checks.
Requirements¶
Requirement: Protocol Metaclass¶
The Protocol metaclass MUST combine typing.Protocol with standard
behaviors.
Scenario: Protocol class creation¶
WHEN a class uses the
ProtocolmetaclassTHEN the resulting class MUST support structural subtyping with immutability and concealment
Requirement: Protocol Base Class¶
ProtocolObject MUST serve as a base class for protocol definitions with
standard behaviors.
Scenario: Protocol inheritance¶
WHEN a class inherits from
ProtocolObjectTHEN the resulting class MUST be a protocol with immutability and concealment
Requirement: Protocol Decorator¶
The protocol_with_standard_behaviors decorator MUST create protocol classes
with standard behaviors.
Scenario: Decorated protocol¶
WHEN
@protocol_with_standard_behaviors()is applied to a classTHEN the resulting class MUST be a protocol with immutability and concealment
Requirement: Structural Subtyping Preservation¶
Protocol functionality MUST be preserved, including structural subtyping and runtime checks.
Scenario: Structural subtyping¶
WHEN a class implements all protocol methods
THEN
isinstance()MUST returnTruefor that protocol
Scenario: Runtime checkable protocols¶
WHEN a protocol is decorated with
@runtime_checkableTHEN
isinstance()checks MUST work correctly
Requirement: ABC Attribute Exemptions¶
ABC-related mutable attributes (_abc_cache, _abc_registry, etc.) MUST
be allowed by default to ensure protocol functionality.
Scenario: ABC cache mutation¶
WHEN Python internals modify
_abc_cacheon a protocol classTHEN no immutability error MUST be raised
Requirement: Implementation Inheritance¶
Immutability and concealment MUST be inherited by classes implementing protocol interfaces.
Scenario: Implementation inherits behaviors¶
WHEN a class implements a protocol with standard behaviors
THEN the implementation MUST inherit immutability and concealment