]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Improve with_metaclass() 471/head
authorSebastian Noack <sebastian.noack@gmail.com>
Wed, 5 Aug 2015 10:53:07 +0000 (12:53 +0200)
committerSebastian Noack <sebastian.noack@gmail.com>
Wed, 5 Aug 2015 10:53:07 +0000 (12:53 +0200)
jinja2/_compat.py

index 143962f384fa89add98f8a1ac181bd418afdad9f..ebe743307451c7923f1a2cb1c728b76aedb5b00b 100644 (file)
@@ -86,23 +86,14 @@ else:
 
 
 def with_metaclass(meta, *bases):
+    """Create a base class with a metaclass."""
     # This requires a bit of explanation: the basic idea is to make a
-    # dummy metaclass for one level of class instanciation that replaces
-    # itself with the actual metaclass.  Because of internal type checks
-    # we also need to make sure that we downgrade the custom metaclass
-    # for one level to something closer to type (that's why __call__ and
-    # __init__ comes back from type etc.).
-    #
-    # This has the advantage over six.with_metaclass in that it does not
-    # introduce dummy classes into the final MRO.
-    class metaclass(meta):
-        __call__ = type.__call__
-        __init__ = type.__init__
+    # dummy metaclass for one level of class instantiation that replaces
+    # itself with the actual metaclass.
+    class metaclass(type):
         def __new__(cls, name, this_bases, d):
-            if this_bases is None:
-                return type.__new__(cls, name, (), d)
             return meta(name, bases, d)
-    return metaclass('temporary_class', None, {})
+    return type.__new__(metaclass, 'temporary_class', (), {})
 
 
 try: