mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-04 10:48:32 +00:00
[ty] Exclude members starting with _abc_
from a protocol interface (#18467)
## Summary As well as excluding a hardcoded set of special attributes, CPython at runtime also excludes any attributes or declarations starting with `_abc_` from the set of members that make up a protocol interface. I missed this in my initial implementation. This is a bit of a CPython implementation detail, but I do think it's important that we try to model the runtime as best we can here. The closer we are to the runtime behaviour, the closer we come to sound behaviour when narrowing types from `isinstance()` checks against runtime-checkable protocols (for example) ## Test Plan Extended an existing mdtest
This commit is contained in:
parent
e658778ced
commit
3a8191529c
2 changed files with 3 additions and 2 deletions
|
@ -389,6 +389,7 @@ not be considered protocol members by type checkers either:
|
|||
class Lumberjack(Protocol):
|
||||
__slots__ = ()
|
||||
__match_args__ = ()
|
||||
_abc_foo: str # any attribute starting with `_abc_` is excluded as a protocol attribute
|
||||
x: int
|
||||
|
||||
def __new__(cls, x: int) -> "Lumberjack":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue