For #27328 - Fix for subclassing hooks

- Previously, sub-classing hooks would only work if the name of the derived class was alphabetically after the name of the base class.
- Derived hook classes tend to be named the same as the base class which meant that the behaviour was indeterminate.
Is the plan to use the _HooksCache as a singleton ? Should the _cache attribute be a class property instead of an instance property ( be __cache instead )