Expose the namedtuple source with a _source attribute.
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index b75b4d7..652e4f1 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -332,13 +332,13 @@
             raise ValueError('Type names and field names cannot be a keyword: %r' % name)
         if name[0].isdigit():
             raise ValueError('Type names and field names cannot start with a number: %r' % name)
-    seen_names = set()
+    seen = set()
     for name in field_names:
         if name.startswith('_') and not rename:
             raise ValueError('Field names cannot start with an underscore: %r' % name)
-        if name in seen_names:
+        if name in seen:
             raise ValueError('Encountered duplicate field name: %r' % name)
-        seen_names.add(name)
+        seen.add(name)
 
     # Fill-in the class template
     class_definition = _class_template.format(
@@ -350,8 +350,6 @@
         field_defs = '\n'.join(_field_template.format(index=index, name=name)
                                for index, name in enumerate(field_names))
     )
-    if verbose:
-        print(class_definition)
 
     # Execute the class definition string in a temporary namespace and
     # support tracing utilities by setting a value for frame.f_globals['__name__']
@@ -361,6 +359,9 @@
     except SyntaxError as e:
         raise SyntaxError(e.msg + ':\n\n' + class_definition)
     result = namespace[typename]
+    result._source = class_definition
+    if verbose:
+        print(result._source)
 
     # For pickling to work, the __module__ variable needs to be set to the frame
     # where the named tuple is created.  Bypass this step in enviroments where
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index d71fb01..cdc7db9 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -127,6 +127,7 @@
         self.assertEqual(Point.__module__, __name__)
         self.assertEqual(Point.__getitem__, tuple.__getitem__)
         self.assertEqual(Point._fields, ('x', 'y'))
+        self.assertIn('class Point(tuple)', Point._source)
 
         self.assertRaises(ValueError, namedtuple, 'abc%', 'efg ghi')       # type has non-alpha char
         self.assertRaises(ValueError, namedtuple, 'class', 'efg ghi')      # type has keyword