MCPcopy Create free account
hub / github.com/PierreGode/Ragnar / with_metaclass

Function with_metaclass

pager_lib/six.py:861–882  ·  view source on GitHub ↗

Create a base class with a metaclass.

(meta, *bases)

Source from the content-addressed store, hash-verified

859
860
861def with_metaclass(meta, *bases):
862 """Create a base class with a metaclass."""
863 # This requires a bit of explanation: the basic idea is to make a dummy
864 # metaclass for one level of class instantiation that replaces itself with
865 # the actual metaclass.
866 class metaclass(type):
867
868 def __new__(cls, name, this_bases, d):
869 if sys.version_info[:2] >= (3, 7):
870 # This version introduced PEP 560 that requires a bit
871 # of extra care (we mimic what is done by __build_class__).
872 resolved_bases = types.resolve_bases(bases)
873 if resolved_bases is not bases:
874 d['__orig_bases__'] = bases
875 else:
876 resolved_bases = bases
877 return meta(name, resolved_bases, d)
878
879 @classmethod
880 def __prepare__(cls, name, this_bases):
881 return meta.__prepare__(name, bases)
882 return type.__new__(metaclass, 'temporary_class', (), {})
883
884
885def add_metaclass(metaclass):

Callers

nothing calls this directly

Calls 1

__new__Method · 0.45

Tested by

no test coverage detected