In backtrader py3.py class, there is a magic method which is used extensively by the code.
# This is from Armin Ronacher from Flash simplified later by sixdefwith_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 instantiation that replaces itself with# the actual metaclass.classmetaclass(meta):def__new__(cls,name,this_bases,d):returnmeta(name, bases, d)returntype.__new__(metaclass,str('temporary_class'),(),{})
The with_metaclass() function makes use of the fact that metaclasses are
a) inherited by subclasses, and
b) a metaclass can be used to generate new classes and
c) when you subclass from a base class with a metaclass, creating the actual subclass object is delegated to the metaclass.
d) type.__new__(metaclass, 'temporary_class', (), {}) uses the metaclass metaclass to create a new class object named temporary_class that is entirely empty otherwise. type.__new__(metaclass, ...) is used instead of metaclass(...) to avoid using the special metaclass.__new__() implementation that is needed for the slight of hand in a next step to work.
If metaclass(...) is used there will be an extra temporary_class base class.
It effectively creates a new, temporary base class with a temporary metaclass metaclass that, when used to create the subclass swaps out the temporary base class.
and it could be used as
At L1 a class named temporary_class has been created from metaclass and assigned to a local variable also named temporary_class.
At L2 when the temporary_class is used as the base class, creating the actual Foo class will be delegated to the temporary_class
the def __new__(cls, name, this_bases, d) function will be called and metaclass, Foo, temporary_class and {} will be passed in. Then meta(name, bases, d) will be used to create the actual Foo class. Note that as no instance of metaclass is return in the __new__ method, the __init__ method inside the metaclass will never be called.