Source code for coalib.bears.meta

from collections import defaultdict

from coalib.bearlib.aspects.collections import AspectList
from coalib.bearlib.languages.Language import Languages

[docs]class bearclass(type): """ Metaclass for :class:`coalib.bears.Bear.Bear` and therefore all bear classes. Pushing bears into the future... ;) """ # by default a bear class has no aspects aspects = defaultdict(lambda: AspectList([])) def __new__(mcs, clsname, bases, clsattrs, *varargs, aspects=None, languages=None): return type.__new__(mcs, clsname, bases, clsattrs, *varargs) def __init__(cls, clsname, bases, clsattrs, *varargs, aspects=None, languages=None): """ Initializes the ``.aspects`` dict and ``.languages`` array on new bear classes from the mapping and the sequence given to the keyword-only `aspects` and `languages` arguments, respectively. """ type.__init__(cls, clsname, bases, clsattrs, *varargs) if aspects is not None: cls.languages = Languages(languages) cls.aspects = defaultdict( lambda: AspectList([]), ((k, AspectList(v, languages=cls.languages)) for (k, v) in dict(aspects).items()))