@@ -353,7 +353,7 @@ def __getnewargs__(self):
353353 {name} = _property(_itemgetter({index:d}), doc='Alias for field number {index:d}')
354354'''
355355
356- def namedtuple (typename , field_names , * , verbose = False , rename = False ):
356+ def namedtuple (typename , field_names , * , verbose = False , rename = False , module = None ):
357357 """Returns a new subclass of tuple with named fields.
358358
359359 >>> Point = namedtuple('Point', ['x', 'y'])
@@ -434,11 +434,15 @@ def namedtuple(typename, field_names, *, verbose=False, rename=False):
434434 # For pickling to work, the __module__ variable needs to be set to the frame
435435 # where the named tuple is created. Bypass this step in environments where
436436 # sys._getframe is not defined (Jython for example) or sys._getframe is not
437- # defined for arguments greater than 0 (IronPython).
438- try :
439- result .__module__ = _sys ._getframe (1 ).f_globals .get ('__name__' , '__main__' )
440- except (AttributeError , ValueError ):
441- pass
437+ # defined for arguments greater than 0 (IronPython), or where the user has
438+ # specified a particular module.
439+ if module is None :
440+ try :
441+ module = _sys ._getframe (1 ).f_globals .get ('__name__' , '__main__' )
442+ except (AttributeError , ValueError ):
443+ pass
444+ if module is not None :
445+ result .__module__ = module
442446
443447 return result
444448
0 commit comments