-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Fix namedtuple discrepancies #2090
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
Comments
I'm working on trying out NamedTuple from typing with mypy, and I ran into an error claiming my tuple has no attribute "_replace" when I try to call _replace. Is this what you're talking about here, or am I running into a different problem? |
What version of mypy do you use? This sounds like an old bug that should have been fixed. Can you post an example code? |
0.4.4. I'll work on some example code quickly. |
from typing import NamedTuple
Foo = NamedTuple('Foo', [
('x', int),
('y', str)
])
def do_something(foo: Foo) -> Foo:
return foo._replace(x=7) I'm getting this error: test.py: note: In function "do_something": |
Can you repro with the latest mypy version from the repro?
|
No it was fixed but not released yet. |
Our policy is to close bugs when the fix lands in the repo. So if this issue is fixed in the repo it should be closed now. (As the originator you should be able to.) |
You were right. Installing directly from git doesn't give any errors. |
@gvanrossum please don't close this issue. It is about other problems, not yet solved. |
Sorry! |
(Reopening #2408 after the revert #2414. This fixes parts of #2090) This PR does three things: Fix the handling of TupleType (pass original_type recursively) Fix the handling of TypeType (avoid ad-hoc buggy special casing) Make NamedTuple's _replace() and _make() return selftype, serving as test case for (1) and (2) As a consequence of (1), some error messages are changed, as exemplified in check-isinstance.test. I think it's better now, but if it isn't, perhaps we should separate original_type and report_type as discussed in #2193.
namedtuple is no longer an experimental mypy concept, I think this can be closed. Any work left belongs in python/typing or CPython :) |
_make
on an instance, as a proper classmethod (?)_make
and_replace
should bind to SelfType, depends on SelfType or another way to spell "type of self" (or, How to define a copy() function) #1212_asdict
should return closer match toOrderedDict[str, Union[types]]
_make
paramsnew
andlen
should be callableThe text was updated successfully, but these errors were encountered: