@Eric: Explicit would still be better than implicit. As you mentioned, inference would not help with stubs that return Self, since there won't be a method body to analyze. It would be good to standardize this across typecheckers.
This pattern of typing `self` or `cls` makes up about a quarter of all TypeVar definitions (in typeshed and other projects). Most people aren't familiar with the `Type[T]` trick for doing this, which means they often leave such methods without any return type. It makes sense to have a simple way to express their intentions ("return Self").
@James: We'd discussed the Self idea during the Typing Summit [1]. Happy to collaborate on this if you'd like.
Another use case is a parameter that needs to be of type Self:
```
class Foo:
def difference(self, other: Self) -> Self: ...
def apply(self, f: Callable[[Self], None]) -> None: ...
```