Annotating with multiple disjoint type requirements (to require non-optional mixins/protocols/etc)

Is anyone thinking about (or is it already possible?) to annotate types with two or more disjoint type requirements? I.e. instead of being able to annotate a type as a single type, say A, it being possible to annotate a type with two or more types A /and/ B, such that A and B have no common parent class (other than object).

I have a use case involving ABCs and mixins where variables should have two (or more) supertypes, and the common types are provided by unknown other implementations and so are not available to be used directly in the annotation (like in the case of a 3rd party library providing the implementation). roughly like:

# components.py
class Engine: ...
class Chair: ...

# chassis.py
class Mountable: ...
class Chassis:
  engine: Engine & Mountable
  seat: Chair & Mountable
  ...

# defined in other, unknown modules
class ElectricAutomotiveEngine(Mountable,Engine): ...
class InternalCombustionAutomotiveEngine(Mountable,Engine): ...
class BucketCarSeat(Mountable,Chair): ... 
class FancyCarSeat(Mountable,Chair): ... 
...

Here, Engine and Chair are ABCs for those kinds of things, Mountable is a mixin that includes attrs and behaviour for classes that can be mounted on a chassis. But for a chassis, the engine and chairs really needs to be both those things /and/ mountable, and the specific implementations are not known in advance to chassis.py.

NB: I’m not looking for help with alternative approaches to implementing this (thank you though), rather what people’s thoughts are about annotating disjoint types

A PEP for type intersections is currently being drafted, but it’s still a little ways off and there are some alternate more simple proposals to consider as well, you will find a lot of discussion about the topic in this repository and its issues