
The reason this doesn't work is that the instance methods `A.meth1` and `B.meth2` expect `self` to be an instance of their own class (or a subtype thereof). For example, the `self` in `A` is implicitly typed as `A`. The full type of this method is `Callable[[A], bool]`. You are then trying to assign this to a `Callable[[Base], bool]`. Parameter types within a callable are contravariant, so this is a type violation. This makes logical sense if you consider that the callback could be invoked with an instance of `Base` (but not `A`) as the first argument. This would violate the assumption made by `A.meth1` is expecting the caller to pass an instance of `A`. If you explicitly annotate the `self` parameter in `A.meth1` and `B.meth2` to accept an instance of `Base`, you can eliminate the type violation. ```python def meth1(self: Base) -> bool: ... ``` -- Eric Traut Contributor to Pyright & Pylance Microsoft Corp.