Whenever a new HasProperties class is created, it is added to the class _REGISTRY defined on HasProperties. This allows classes to be easily referenced and accessed by name. For example, when serializing an instance, its __class__ may be saved. Then on deserialization, the instance can be reconstructed based on the corresponding entry in the registry.

_REGISTRY can also be overridden in HasProperties subclasses. This creates a separate registry branch where all subclasses on the branch are saved to the new registry. Overriding _REGISTRY may be necessary to prevent namespace conflicts when importing multiple modules with HasProperties classes.