@@ -4060,16 +4060,19 @@ def test_typeddict_special_keyword_names(self):
40604060 self .assertEqual (TD .__annotations__ , {'cls' : type , 'self' : object , 'typename' : str ,
40614061 '_typename' : int , 'fields' : list , '_fields' : dict ,
40624062 'closed' : bool , 'extra_items' : bool })
4063- self .assertIs (TD .__closed__ , False )
4063+ self .assertIs (TD .__closed__ , None )
40644064 self .assertIs (TD .__extra_items__ , NoExtraItems )
40654065 a = TD (cls = str , self = 42 , typename = 'foo' , _typename = 53 ,
4066- fields = [('bar' , tuple )], _fields = {'baz' , set })
4066+ fields = [('bar' , tuple )], _fields = {'baz' , set },
4067+ closed = None , extra_items = "tea pot" )
40674068 self .assertEqual (a ['cls' ], str )
40684069 self .assertEqual (a ['self' ], 42 )
40694070 self .assertEqual (a ['typename' ], 'foo' )
40704071 self .assertEqual (a ['_typename' ], 53 )
40714072 self .assertEqual (a ['fields' ], [('bar' , tuple )])
40724073 self .assertEqual (a ['_fields' ], {'baz' , set })
4074+ self .assertEqual (a ['closed' ], None )
4075+ self .assertEqual (a ['extra_items' ], "tea pot" )
40734076
40744077 def test_typeddict_create_errors (self ):
40754078 with self .assertRaises (TypeError ):
@@ -4317,6 +4320,16 @@ class ChildWithInlineAndOptional(Untotal, Inline):
43174320 class Wrong (* bases ):
43184321 pass
43194322
4323+ def test_closed_values (self ):
4324+ class Implicit (TypedDict ): ...
4325+ class ExplicitTrue (TypedDict , closed = True ): ...
4326+ class ExplicitFalse (TypedDict , closed = False ): ...
4327+
4328+ self .assertIs (Implicit .__closed__ , None )
4329+ self .assertIs (ExplicitTrue .__closed__ , True )
4330+ self .assertIs (ExplicitFalse .__closed__ , False )
4331+
4332+
43204333 @skipIf (TYPING_3_14_0 , "only supported on older versions" )
43214334 def test_closed_typeddict_compat (self ):
43224335 class Closed (TypedDict , closed = True ):
@@ -4843,6 +4856,10 @@ class ChildA(Base, closed=True):
48434856 self .assertEqual (ChildA .__extra_items__ , Never )
48444857 self .assertTrue (ChildA .__closed__ )
48454858
4859+ @skipIf (TYPING_3_14_0 , "Backwards compatibility only for Python 3.13" )
4860+ def test_implicit_extra_items_before_3_14 (self ):
4861+ class Base (TypedDict ):
4862+ a : int
48464863 class ChildB (Base , closed = True ):
48474864 __extra_items__ : None
48484865
0 commit comments