]> granicus.if.org Git - python/commitdiff
Bug #2565: The repr() of type objects now calls them 'class',
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 7 Apr 2008 05:43:42 +0000 (05:43 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 7 Apr 2008 05:43:42 +0000 (05:43 +0000)
not 'type' - whether they are builtin types or not.

13 files changed:
Doc/library/stdtypes.rst
Doc/tutorial/errors.rst
Lib/ctypes/test/test_structures.py
Lib/test/test_defaultdict.py
Lib/test/test_descrtut.py
Lib/test/test_doctest3.txt
Lib/test/test_generators.py
Lib/test/test_genexps.py
Lib/test/test_metaclass.py
Lib/test/test_wsgiref.py
Lib/test/test_xmlrpc.py
Misc/NEWS
Objects/typeobject.c

index 521359844026bada2278d709acb19eb7f8d80a9a..65408ce58c5259e8185b82ac34817ee25aa5312c 100644 (file)
@@ -2345,7 +2345,7 @@ by the built-in function :func:`type`.  There are no special operations on
 types.  The standard module :mod:`types` defines names for all standard built-in
 types.
 
-Types are written like this: ``<type 'int'>``.
+Types are written like this: ``<class 'int'>``.
 
 
 .. _bltin-null-object:
index 5c652a98714956aad7b1565756bf9ac151cdbcb6..cedffd5ba65ccb3d8552eebc62fdf7f716243e05 100644 (file)
@@ -184,7 +184,7 @@ desired. ::
    ...    print('x =', x)
    ...    print('y =', y)
    ...
-   <type 'Exception'>
+   <class 'Exception'>
    ('spam', 'eggs')
    ('spam', 'eggs')
    x = spam
index c4eee86f1f9ce73766c6b5cfda0e4c42222bf089..3587f0f11df0b3c114a251d39a09a468c31cf4da 100644 (file)
@@ -307,14 +307,14 @@ class StructureTestCase(unittest.TestCase):
         cls, msg = self.get_except(Person, "Someone", (1, 2))
         self.failUnlessEqual(cls, RuntimeError)
         self.failUnlessEqual(msg,
-                             "(Phone) <type 'TypeError'>: "
+                             "(Phone) <class 'TypeError'>: "
                              "expected string, int found")
 
         cls, msg = self.get_except(Person, "Someone", ("a", "b", "c"))
         self.failUnlessEqual(cls, RuntimeError)
         if issubclass(Exception, object):
             self.failUnlessEqual(msg,
-                                 "(Phone) <type 'TypeError'>: too many initializers")
+                                 "(Phone) <class 'TypeError'>: too many initializers")
         else:
             self.failUnlessEqual(msg, "(Phone) TypeError: too many initializers")
 
index 6eb25adc289fc57c798a35e3f4c4f3144551cb33..065cc1020302be249a12e79580a98d0b18fa2b01 100644 (file)
@@ -64,7 +64,7 @@ class TestDefaultDict(unittest.TestCase):
         d2 = defaultdict(int)
         self.assertEqual(d2.default_factory, int)
         d2[12] = 42
-        self.assertEqual(repr(d2), "defaultdict(<type 'int'>, {12: 42})")
+        self.assertEqual(repr(d2), "defaultdict(<class 'int'>, {12: 42})")
         def foo(): return 43
         d3 = defaultdict(foo)
         self.assert_(d3.default_factory is foo)
index 4933c9f5b8a99df0a7a9f8930a080c90ac713542..1ddab0e5463a6037fe6229375c37d6e042b08f62 100644 (file)
@@ -39,7 +39,7 @@ Here's the new type at work:
     >>> print(defaultdict)              # show our type
     <class 'test.test_descrtut.defaultdict'>
     >>> print(type(defaultdict))        # its metatype
-    <type 'type'>
+    <class 'type'>
     >>> a = defaultdict(default=0.0)    # create an instance
     >>> print(a)                        # show the instance
     {}
@@ -149,11 +149,11 @@ Introspecting instances of built-in types
 For instance of built-in types, x.__class__ is now the same as type(x):
 
     >>> type([])
-    <type 'list'>
+    <class 'list'>
     >>> [].__class__
-    <type 'list'>
+    <class 'list'>
     >>> list
-    <type 'list'>
+    <class 'list'>
     >>> isinstance([], list)
     True
     >>> isinstance([], dict)
@@ -346,7 +346,7 @@ Hmm -- property is builtin now, so let's try it that way too.
 
     >>> del property  # unmask the builtin
     >>> property
-    <type 'property'>
+    <class 'property'>
 
     >>> class C(object):
     ...     def __init__(self):
index 54a96d58e1437bb2634cf07c28dd88c096cc4c36..dd8557e57a509b8cb6bcfe3c689a1f29293c407e 100644 (file)
@@ -2,4 +2,4 @@
 Here we check that `__file__` is provided:
 
   >>> type(__file__)
-  <type 'str'>
+  <class 'str'>
index 04f13590dfd0d4a080f4c98447b36b3307c40b60..992126ff05d893ce95900a0ff01d49046951bb39 100644 (file)
@@ -377,10 +377,10 @@ From the Iterators list, about the types of these things.
 ...     yield 1
 ...
 >>> type(g)
-<type 'function'>
+<class 'function'>
 >>> i = g()
 >>> type(i)
-<type 'generator'>
+<class 'generator'>
 >>> [s for s in dir(i) if not s.startswith('_')]
 ['close', 'gi_code', 'gi_frame', 'gi_running', 'send', 'throw']
 >>> print(i.__next__.__doc__)
@@ -396,7 +396,7 @@ And more, added later.
 >>> i.gi_running
 0
 >>> type(i.gi_frame)
-<type 'frame'>
+<class 'frame'>
 >>> i.gi_running = 42
 Traceback (most recent call last):
   ...
@@ -794,27 +794,27 @@ These are fine:
 >>> def f():
 ...    yield
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 
 >>> def f():
 ...    if 0:
 ...        yield
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 
 >>> def f():
 ...     if 0:
 ...         yield 1
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 >>> def f():
 ...    if "":
 ...        yield None
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 >>> def f():
 ...     return
@@ -838,7 +838,7 @@ These are fine:
 ...         x = 1
 ...     return
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 >>> def f():
 ...     if 0:
@@ -846,7 +846,7 @@ These are fine:
 ...             yield 1
 ...
 >>> type(f())
-<type 'NoneType'>
+<class 'NoneType'>
 
 >>> def f():
 ...     if 0:
@@ -856,7 +856,7 @@ These are fine:
 ...             def f(self):
 ...                 yield 2
 >>> type(f())
-<type 'NoneType'>
+<class 'NoneType'>
 
 >>> def f():
 ...     if 0:
@@ -864,7 +864,7 @@ These are fine:
 ...     if 0:
 ...         yield 2
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 
 >>> def f():
@@ -1512,7 +1512,7 @@ And a more sane, but still weird usage:
 
 >>> def f(): list(i for i in [(yield 26)])
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 
 A yield expression with augmented assignment.
@@ -1749,25 +1749,25 @@ enclosing function a generator:
 
 >>> def f(): x += yield
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 >>> def f(): x = yield
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 >>> def f(): lambda x=(yield): 1
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 >>> def f(): x=(i for i in (yield) if (yield))
 >>> type(f())
-<type 'generator'>
+<class 'generator'>
 
 >>> def f(d): d[(yield "a")] = d[(yield "b")] = 27
 >>> data = [1,2]
 >>> g = f(data)
 >>> type(g)
-<type 'generator'>
+<class 'generator'>
 >>> g.send(None)
 'a'
 >>> data
index 6c60d02e78a5ab9b48ce5c579dfda866243c04c8..46f7ab88f35eed84fd32563b7ab2cddd7c586a0b 100644 (file)
@@ -27,7 +27,7 @@ Test first class
 
     >>> g = (i*i for i in range(4))
     >>> type(g)
-    <type 'generator'>
+    <class 'generator'>
     >>> list(g)
     [0, 1, 4, 9]
 
index abb333032852fcf8ba6b5193b4badf838353184c..733418ef95512a8257bc3f294e4a8388d8e989d4 100644 (file)
@@ -78,7 +78,7 @@ Also pass another keyword.
     >>> class C(object, metaclass=M, other="haha"):
     ...     pass
     ...
-    Prepare called: ('C', (<type 'object'>,)) {'other': 'haha'}
+    Prepare called: ('C', (<class 'object'>,)) {'other': 'haha'}
     New called: {'other': 'haha'}
     >>> C.__class__ is M
     True
@@ -104,7 +104,7 @@ Use various combinations of explicit keywords and **kwds.
     >>> kwds = {'metaclass': M, 'other': 'haha'}
     >>> class C(*bases, **kwds): pass
     ...
-    Prepare called: ('C', (<type 'object'>,)) {'other': 'haha'}
+    Prepare called: ('C', (<class 'object'>,)) {'other': 'haha'}
     New called: {'other': 'haha'}
     >>> C.__class__ is M
     True
@@ -114,7 +114,7 @@ Use various combinations of explicit keywords and **kwds.
     >>> kwds = {'other': 'haha'}
     >>> class C(B, metaclass=M, *bases, **kwds): pass
     ...
-    Prepare called: ('C', (<class 'test.test_metaclass.B'>, <type 'object'>)) {'other': 'haha'}
+    Prepare called: ('C', (<class 'test.test_metaclass.B'>, <class 'object'>)) {'other': 'haha'}
     New called: {'other': 'haha'}
     >>> C.__class__ is M
     True
index bcf6352063aeebb394f985ed47612956a594cabb..c02f0af8247b3afa85d05f685f767e27eeecd967 100755 (executable)
@@ -157,7 +157,7 @@ class IntegrationTests(TestCase):
         self.assertEqual(
             err.splitlines()[-2],
             "AssertionError: Headers (('Content-Type', 'text/plain')) must"
-            " be of type list: <type 'tuple'>"
+            " be of type list: <class 'tuple'>"
         )
 
 
index 0691f23847bf5d932c7570e94ae9613d236ac1f4..e708927e0e414d5d2398fbf76cff7726ddeabe44 100644 (file)
@@ -416,12 +416,12 @@ class SimpleServerTestCase(unittest.TestCase):
             result = multicall()
 
             # result.results contains;
-            # [{'faultCode': 1, 'faultString': '<type \'exceptions.Exception\'>:'
+            # [{'faultCode': 1, 'faultString': '<class \'exceptions.Exception\'>:'
             #   'method "this_is_not_exists" is not supported'>}]
 
             self.assertEqual(result.results[0]['faultCode'], 1)
             self.assertEqual(result.results[0]['faultString'],
-                '<type \'Exception\'>:method "this_is_not_exists" '
+                '<class \'Exception\'>:method "this_is_not_exists" '
                 'is not supported')
         except (xmlrpclib.ProtocolError, socket.error) as e:
             # ignore failures due to non-blocking socket 'unavailable' errors
index 30d1d39b7447005e00ebc38be972b3f11d70418d..327c19939b522c6a13e299aa0a2c992f889b0f59 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 3.0a5?
 Core and Builtins
 -----------------
 
+- Bug #2565: The repr() of type objects now calls them 'class', 
+  not 'type' - whether they are builtin types or not.
+
 - The command line processing was converted to pass Unicode strings
   through as unmodified as possible; as a consequence, the C API
   related to command line arguments was changed to use wchar_t.
index 7a6d258329b2706f4c44c2451650ba1fbbcbc289..e2e365e351d514c1f50c2cfad2a5321b2df6edeb 100644 (file)
@@ -600,7 +600,6 @@ static PyObject *
 type_repr(PyTypeObject *type)
 {
        PyObject *mod, *name, *rtn;
-       char *kind;
 
        mod = type_module(type, NULL);
        if (mod == NULL)
@@ -613,15 +612,10 @@ type_repr(PyTypeObject *type)
        if (name == NULL)
                return NULL;
 
-       if (type->tp_flags & Py_TPFLAGS_HEAPTYPE)
-               kind = "class";
-       else
-               kind = "type";
-
        if (mod != NULL && PyUnicode_CompareWithASCIIString(mod, "builtins"))
-               rtn = PyUnicode_FromFormat("<%s '%U.%U'>", kind, mod, name);
+               rtn = PyUnicode_FromFormat("<class '%U.%U'>", mod, name);
        else
-               rtn = PyUnicode_FromFormat("<%s '%s'>", kind, type->tp_name);
+               rtn = PyUnicode_FromFormat("<class '%s'>", type->tp_name);
 
        Py_XDECREF(mod);
        Py_DECREF(name);