From 743598d788528921df825479d64f492ef60bef82 Mon Sep 17 00:00:00 2001 From: Sebastian Noack Date: Wed, 5 Aug 2015 12:53:07 +0200 Subject: [PATCH] Improve with_metaclass() --- jinja2/_compat.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/jinja2/_compat.py b/jinja2/_compat.py index 143962f3..ebe74330 100644 --- a/jinja2/_compat.py +++ b/jinja2/_compat.py @@ -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: -- 2.47.2