Is this intentional? Is the idea that isinstance(foo, Index) can be replaced by isinstance(foo, ABCIndexClass) and not isinstance(foo, ABCIndex)? Now that I look at it this seems obvious, but still unexpected.

import pandas as pd
idx = pd.Int64Index([1, 2, 1, 1, 1], dtype='int64')

>>> isinstance(idx, pd.core.dtypes.generic.ABCIndex)
False

Checking isinstance(by, ABCIndex) instead of isinstance(by, Index) caused a test failure in #17174.

Possibly related is a comment in pd.core.strings.StringAccessorMixin._make_str_accessor:

        elif isinstance(self, Index):
            # can't use ABCIndex to exclude non-str

I count 6 usages of ABCIndex across the package. Are we sure no one else has made the same mistake I did of using this where ABCIndexClass should have been used?

Comment From: jreback

this is as expected

Comment From: jbrockmendel

Should the comment in _make_str_accessor refer to ABCIndexClass?