Skip to content

Commit d2dc190

Browse files
committed
Have nametuple __replace__ return self
1 parent 55a0812 commit d2dc190

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

mypy/semanal_namedtuple.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
TYPED_NAMEDTUPLE_NAMES,
5858
AnyType,
5959
CallableType,
60+
Instance,
6061
LiteralType,
6162
TupleType,
6263
Type,
@@ -633,7 +634,7 @@ def add_method(
633634
if self.options.python_version >= (3, 13):
634635
add_method(
635636
"__replace__",
636-
ret=None,
637+
ret=Instance(info, []),
637638
args=[Argument(var, var.type, EllipsisExpr(), ARG_NAMED_OPT) for var in vars],
638639
)
639640

test-data/unit/check-namedtuple.test

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1407,9 +1407,12 @@ from typing import NamedTuple
14071407
class A(NamedTuple):
14081408
x: int
14091409

1410-
A(x=0).__replace__(x=1)
1410+
replaced = A(x=0).__replace__(x=1)
1411+
reveal_type(replaced) # N: Revealed type is "Tuple[builtins.int, fallback=__main__.A]"
1412+
14111413
A(x=0).__replace__(x="asdf") # E: Argument "x" to "__replace__" of "A" has incompatible type "str"; expected "int"
14121414
A(x=0).__replace__(y=1) # E: Unexpected keyword argument "y" for "__replace__" of "A"
1415+
14131416
[builtins fixtures/tuple.pyi]
14141417
[typing fixtures/typing-namedtuple.pyi]
14151418

0 commit comments

Comments
 (0)