]> granicus.if.org Git - python/commitdiff
metaclass(): add tests for metaclasses written in Python: one that
authorGuido van Rossum <guido@python.org>
Fri, 17 Aug 2001 11:43:17 +0000 (11:43 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 17 Aug 2001 11:43:17 +0000 (11:43 +0000)
subclasses type, one that doesn't (the latter isn't fully functional
yet).

Lib/test/test_descr.py

index f524dbaa5fdcfa85af1e7d141acdc0192a0ae9de..247a4c49b3c244d92f71abddd1f48d2efcb46d43 100644 (file)
@@ -381,6 +381,39 @@ def metaclass():
         class __metaclass__(type):
             def myself(cls): return cls
     verify(D.myself() == D)
+    d = D()
+    verify(d.__class__ is D)
+    class M1(type):
+        def __new__(cls, name, bases, dict):
+            dict['__spam__'] = 1
+            return type.__new__(cls, name, bases, dict)
+    class C:
+        __metaclass__ = M1
+    verify(C.__spam__ == 1)
+    c = C()
+    verify(c.__spam__ == 1)
+    class _instance(object):
+        pass
+    class M2(object):
+        def __new__(cls, name, bases, dict):
+            self = object.__new__(cls)
+            self.name = name
+            self.bases = bases
+            self.dict = dict
+            return self
+        __new__ = staticmethod(__new__)
+        def __call__(self):
+            it = _instance()
+            # XXX Should do more, but that doesn't work yet
+            return it
+    class C:
+        __metaclass__ = M2
+        def spam(self):
+            return 42
+    verify(C.name == 'C')
+    verify(C.bases == ())
+    verify('spam' in C.dict)
+    c = C()
 
 def pymods():
     if verbose: print "Testing Python subclass of module..."