@@ -936,14 +936,24 @@ def __replace__(self, **changes):
936
936
937
937
def test_namedtuple (self ):
938
938
from collections import namedtuple
939
- Point = namedtuple ('Point' , 'x y' , defaults = (0 ,))
940
- p = Point (11 , 22 )
941
- self .assertEqual (copy .replace (p ), (11 , 22 ))
942
- self .assertEqual (copy .replace (p , x = 1 ), (1 , 22 ))
943
- self .assertEqual (copy .replace (p , y = 2 ), (11 , 2 ))
944
- self .assertEqual (copy .replace (p , x = 1 , y = 2 ), (1 , 2 ))
945
- with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
946
- copy .replace (p , x = 1 , error = 2 )
939
+ from typing import NamedTuple
940
+ PointFromCall = namedtuple ('Point' , 'x y' , defaults = (0 ,))
941
+ class PointFromInheritance (PointFromCall ):
942
+ pass
943
+ class PointFromClass (NamedTuple ):
944
+ x : int
945
+ y : int = 0
946
+ for Point in (PointFromCall , PointFromInheritance , PointFromClass ):
947
+ with self .subTest (Point = Point ):
948
+ p = Point (11 , 22 )
949
+ self .assertIsInstance (p , Point )
950
+ self .assertEqual (copy .replace (p ), (11 , 22 ))
951
+ self .assertIsInstance (copy .replace (p ), Point )
952
+ self .assertEqual (copy .replace (p , x = 1 ), (1 , 22 ))
953
+ self .assertEqual (copy .replace (p , y = 2 ), (11 , 2 ))
954
+ self .assertEqual (copy .replace (p , x = 1 , y = 2 ), (1 , 2 ))
955
+ with self .assertRaisesRegex (ValueError , 'unexpected field name' ):
956
+ copy .replace (p , x = 1 , error = 2 )
947
957
948
958
def test_dataclass (self ):
949
959
from dataclasses import dataclass
0 commit comments