-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Do not count __slots__
as a protocol member
#11885
Conversation
It's not so clear-cut, but would it be worth special-casing |
Can you please open a new issue for it? Probably we need to discuss / research all special cases separatelly. But, it looks like a good candidate 👍 |
Sure! |
New issue filed here: #11886 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me, though #11886 might be easily combined with this if __class_getitem__
is to be ignored (though keeping seperate PRs is admirable and perfectly fine too).
Now I am also thinking: what if I want to have a function / interface / contract / whatever that only works with slotted types? How can I express this? For example: def pretty_print_slots(klass_with_slots: ???) -> None:
... I guess what Eric said in #11886 really makes sense. So, proably we can ignore protocols Do you agree? |
That sounds like a decent solution too, tried it out a bit and found some weird behavior in current mypy somewhat related to this, just bringing this up because it's a bit funny: This fails: import typing
@typing.runtime_checkable
class Foo(typing.Protocol):
__slots__ = ()
class Bar(Foo):
...
print(issubclass(Bar, Foo)) # this fails and this works: import typing
@typing.runtime_checkable
class Foo(typing.Protocol):
__slots__: str | typing.Iterable[str] = ()
class Bar(Foo):
...
print(issubclass(Bar, Foo)) # this does not ? (Anyways, that'll get fixed by this too, it's just some weird behavior...) Basically yes, I agree that would make sense to me -- though I'm sure any solution would be nice. |
We are blocked by #11891 |
I wonder if it's even helpful for typeshed to define |
@AlexWaygood well, technically,
My vote is to remove them (my opinion is pretty simple: typeshed should be as close to source as possible). |
This comment has been minimized.
This comment has been minimized.
Diff from mypy_primer, showing the effect of this PR on open source code: discord.py (https://github.com/Rapptz/discord.py)
- discord/ext/commands/core.py:2333: error: Argument 1 to "is_owner" of "BotBase" has incompatible type "Union[discord.user.User, Member]"; expected "discord.abc.User"
|
What's the status of this? Instead of hard-coding Maybe I should try making a separate PR with my suggestions? |
@HexDecimal I've deleted my fork by accident. You can re-submit this if you need this feature :) |
I'll go ahead and attempt my own PR. I mostly want to fetch your test to work with. |
Great, ping me to review your PR :) |
Refs #9314
Closes #11884