mypy
mypy copied to clipboard
Presence of property in Protocol causes false positive in multiple inheritance scenario
Bug Report
I'm getting a false positive from the following example
from typing import Protocol
from typing_extensions import Self
class P(Protocol):
# Removing the property makes the problem disappear
@property
def x(self) -> int: ...
def clone(self) -> Self: ...
class A:
def clone(self) -> Self:
return self
class B(A, P):
@property
def x(self) -> int:
return 100
main.py:18: error: Definition of "clone" in base class "A" is incompatible with definition in base class "P" [misc]
Obviously, A.clone does not actually clone the instance, but that is left out for clarity.
The false positive is not reported when I remove the property x from the protocol P.
To Reproduce
https://mypy-play.net/?mypy=latest&python=3.12&gist=fe15d8bc18aa7b61feb3e56fce615f47
Thanks, looks like it's not just property, basically anything else in the Protocol seems to trigger the error:
from typing import Protocol, Self
class P(Protocol):
def foo(self) -> None: ...
def clone(self) -> Self: ...
class A:
def clone(self) -> Self: ...
class B(A, P):
pass
(As a workaround you can consider not explicitly inheriting from the protocol)