pandas icon indicating copy to clipboard operation
pandas copied to clipboard

Refactor inherit_names to work by inheritance

Open SaturnFromTitan opened this issue 5 years ago • 2 comments

We face a lot of mypy errors due to the dynamic nature of inherit_names. See issue #31716 and the discussion that evolved there.

Summary: In the past, we added explicit type annotations to the respective classes, but this approach doesn't scale.

As mypy is a static type checker, it cannot understand the dynamic nature of inherit_names by design. The only alternative would be to refactor inherit_names to work by inheritance instead of dynamic assignments. This would make the code more understandable to humans as well.

SaturnFromTitan avatar Feb 19 '20 12:02 SaturnFromTitan

Convincing pyright/mypy to infer "inherited" methods sounds unlikely https://github.com/microsoft/pyright/issues/3812.

Using mixin sub-classes to out-source common methods/properties definitely sounds like the best way to go! Is that still the ideal way to deal with that? @simonjayhawkins

I can imagine that those mixin-classes might need to be abstract as the shared methods might refer to methods/properties not existing in those otherwise empty mixin-classes (or we add many mypy ignore comments inside those methods).

There are luckily only a "few" classes making use of inherit_names: IntervalIndex, DatetimeIndexOpsMixin, CategoricalIndex, PeriodIndex, TimedeltaIndex, DatetimeIndex.

twoertwein avatar Aug 08 '22 23:08 twoertwein

Using mixin sub-classes to out-source common methods/properties definitely sounds like the best way to go!

seems that isn't possible as self needs to be self._data

twoertwein avatar Aug 09 '22 02:08 twoertwein