]> granicus.if.org Git - python/commitdiff
(Merge into trunk.)
authorGuido van Rossum <guido@python.org>
Fri, 14 Dec 2001 04:19:56 +0000 (04:19 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 14 Dec 2001 04:19:56 +0000 (04:19 +0000)
Fix for SF bug #492345.  (I could've sworn I checked this in, but
apparently I didn't!)

This code:

    class Classic:
        pass

    class New(Classic):
        __metaclass__ = type

attempts to create a new-style class with only classic bases -- but it
doesn't work right.  Attempts to fix it so it works caused problems
elsewhere, so I'm now raising a TypeError in this case.

Lib/test/test_descr.py
Objects/typeobject.c

index 1ec7c19c80098a19b3c0c9cbc0d4c5db628fa9bc..ea987f223c7198d1bc601b150ebf39c6ce10b9b8 100644 (file)
@@ -922,6 +922,16 @@ def multi():
     vereq(m.m3method(), "M3 a")
     vereq(m.all_method(), "M3 b")
 
+    class Classic:
+        pass
+    try:
+        class New(Classic):
+            __metaclass__ = type
+    except TypeError:
+        pass
+    else:
+        raise TestFailed, "new class with only classic bases - shouldn't be"
+
 def diamond():
     if verbose: print "Testing multiple inheritance special cases..."
     class A(object):
index 6243e81e71af9e1e800fe9689eb2c184c5c2780a..ba3006389f2b9d2845b446cbcf2b8d70c7e2d8b4 100644 (file)
@@ -757,7 +757,9 @@ best_base(PyObject *bases)
                        return NULL;
                }
        }
-       assert(base != NULL);
+       if (base == NULL)
+               PyErr_SetString(PyExc_TypeError,
+                       "a new-style class can't have only classic bases");
        return base;
 }