@@ -3872,28 +3872,59 @@ class Super:
38723872 def foo(self, a: C) -> C: pass
38733873
38743874class Sub(Super):
3875- @overload # Fail
3875+ @overload
38763876 def foo(self, a: A) -> A: pass
38773877 @overload
38783878 def foo(self, a: B) -> C: pass # Fail
38793879 @overload
38803880 def foo(self, a: C) -> C: pass
3881+
3882+ class Sub2(Super):
3883+ @overload
3884+ def foo(self, a: B) -> C: pass # Fail
3885+ @overload
3886+ def foo(self, a: A) -> A: pass
3887+ @overload
3888+ def foo(self, a: C) -> C: pass
3889+
3890+ class Sub3(Super):
3891+ @overload
3892+ def foo(self, a: A) -> int: pass
3893+ @overload
3894+ def foo(self, a: A) -> A: pass
3895+ @overload
3896+ def foo(self, a: C) -> C: pass
38813897[builtins fixtures/classmethod.pyi]
38823898[out]
3883- tmp/foo.pyi:16: error: Signature of "foo" incompatible with supertype "Super"
3884- tmp/foo.pyi:16: note: Superclass:
3885- tmp/foo.pyi:16: note: @overload
3886- tmp/foo.pyi:16: note: def foo(self, a: A) -> A
3887- tmp/foo.pyi:16: note: @overload
3888- tmp/foo.pyi:16: note: def foo(self, a: C) -> C
3889- tmp/foo.pyi:16: note: Subclass:
3890- tmp/foo.pyi:16: note: @overload
3891- tmp/foo.pyi:16: note: def foo(self, a: A) -> A
3892- tmp/foo.pyi:16: note: @overload
3893- tmp/foo.pyi:16: note: def foo(self, a: B) -> C
3894- tmp/foo.pyi:16: note: @overload
3895- tmp/foo.pyi:16: note: def foo(self, a: C) -> C
38963899tmp/foo.pyi:19: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same or broader
3900+ tmp/foo.pyi:24: error: Signature of "foo" incompatible with supertype "Super"
3901+ tmp/foo.pyi:24: note: Superclass:
3902+ tmp/foo.pyi:24: note: @overload
3903+ tmp/foo.pyi:24: note: def foo(self, a: A) -> A
3904+ tmp/foo.pyi:24: note: @overload
3905+ tmp/foo.pyi:24: note: def foo(self, a: C) -> C
3906+ tmp/foo.pyi:24: note: Subclass:
3907+ tmp/foo.pyi:24: note: @overload
3908+ tmp/foo.pyi:24: note: def foo(self, a: B) -> C
3909+ tmp/foo.pyi:24: note: @overload
3910+ tmp/foo.pyi:24: note: def foo(self, a: A) -> A
3911+ tmp/foo.pyi:24: note: @overload
3912+ tmp/foo.pyi:24: note: def foo(self, a: C) -> C
3913+ tmp/foo.pyi:25: error: Overloaded function signatures 1 and 2 overlap with incompatible return types
3914+ tmp/foo.pyi:32: error: Signature of "foo" incompatible with supertype "Super"
3915+ tmp/foo.pyi:32: note: Superclass:
3916+ tmp/foo.pyi:32: note: @overload
3917+ tmp/foo.pyi:32: note: def foo(self, a: A) -> A
3918+ tmp/foo.pyi:32: note: @overload
3919+ tmp/foo.pyi:32: note: def foo(self, a: C) -> C
3920+ tmp/foo.pyi:32: note: Subclass:
3921+ tmp/foo.pyi:32: note: @overload
3922+ tmp/foo.pyi:32: note: def foo(self, a: A) -> int
3923+ tmp/foo.pyi:32: note: @overload
3924+ tmp/foo.pyi:32: note: def foo(self, a: A) -> A
3925+ tmp/foo.pyi:32: note: @overload
3926+ tmp/foo.pyi:32: note: def foo(self, a: C) -> C
3927+ tmp/foo.pyi:35: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same or broader
38973928
38983929[case testTypeTypeOverlapsWithObjectAndType]
38993930from foo import *
0 commit comments