
I am working on a PR for typeshed that will use a protocol (_SupportsLessThan) to make sure that the parameterized type of arguments to `sorted` can be sorted—which requires they implement `__lt__`. In Python 3, there are two cases relevant to this discussion: - if no `key` argument is given, then the first arg of `sorted` must be `Iterable[SupportsLessThan]`. - if a `key` argument is given, then the first argument can be `Iterable[Any]`, but the `key` argument must be a callable that returns a value that `SupportsLessThan` The same PR is supposed to enhance the type hints for the `list.sort` method, but in this case, I don't know how to deal with the case where no `key` is given. Can I just annotate `self`? class list: ... def sort(self: List[SupportsLessThan]... etc.... The whole thing is more complicated than I just described, @overload is required to make the `sorted` annotations. My question is about constraining `self`, because it turns out that not all list instances are sortable... Cheers, Luciano -- Luciano Ramalho | Author of Fluent Python (O'Reilly, 2015) | http://shop.oreilly.com/product/0636920032519.do | Technical Principal at ThoughtWorks | Twitter: @ramalhoorg