Closed
Description
Feature
Consider the following minimal example
assert type(tuple) is type
class MyMeta(type): pass
class MyTuple(tuple, metaclass=MyMeta): pass
As of 0.990
, mypy complains about this
error: Metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases [misc]
Same if I use
class MyMeta(tuple.__class__): pass
or
class MyMeta(type(tuple)): pass
instead
Pitch
I propose 2 alternatives to help users deal with this
- Teach mypy that
tuple.__class__ is type
and that this is fine (preferred) - Tell users to use
# typing: ignore
to resolve such cases.
Technically, this is already possible today, but I suggest 2 improvements:- https://mypy.readthedocs.io/en/stable/metaclasses.html#gotchas-and-limitations-of-metaclass-support only lists what mypy can't handle. It does not talk about how to work around it => add a note telling users to
# typing: ignore[misc]
it. I'd like to mention that this feels pretty broad of an exception and might hide other real problems. Since this is an area where mypy might be overly restrictive and a workaround might be necessary, it should maybe be in a less broad category. - This is the more important point to me: this comment needs to be added to every subclass of
MyTuple
which can be frustratingly tedious. Maybe there should be away to tell mypy "ok, you might not understand this, but trust me that this classMyTuple
has a valid metaclass, assume so for all child classes".
- https://mypy.readthedocs.io/en/stable/metaclasses.html#gotchas-and-limitations-of-metaclass-support only lists what mypy can't handle. It does not talk about how to work around it => add a note telling users to