def __init__(cls, *args, **kwargs):
    assert isinstance(cls.name, str)
    assert isinstance(cls.defaults, dict)
    assert isinstance(cls.attributes, list)
    assert isinstance(cls.version, tuple)
    if isinstance(cls.typeid, (int, float)):
        cls.typeid = TypeId(cls.typeid)
    index = 1
    for attribute in cls.attributes:
        if isinstance(attribute, Divider):
            attribute['name'] = ('_' * index)
            attribute['shortName'] = ('_' * index)
            index += 1
    assert (len(set(cls.attributes)) == len(cls.attributes)), ("One or more attributes in '%s' was found more than once" % cls.__name__)
    attributes = {attr['name']: attr for attr in cls.attributes}

    def findAttribute(self, name):
        return attributes.get(name)

    def findMObject(self, name):
        return attributes.get(name)['mobject']

    def findPlug(self, node, name):
        try:
            mobj = attributes.get(name)['mobject']
            return om.MPlug(node, mobj)
        except KeyError:
            return None
    cls.findAttribute = findAttribute
    cls.findMObject = findMObject
    cls.findPlug = findPlug
    cls.find_attribute = findAttribute
    cls.find_mobject = findMObject
    cls.find_plug = findPlug
    cls.log = logging.getLogger(cls.__name__)
    return super(MetaNode, cls).__init__(*args, **kwargs)
def __init__(cls, *args, **kwargs):
    assert isinstance(cls.name, str)
    assert isinstance(cls.defaults, dict)
    assert isinstance(cls.attributes, list)
    assert isinstance(cls.version, tuple)
    if isinstance(cls.typeid, (int, float)):
        cls.typeid = TypeId(cls.typeid)
    index = 1
    for attribute in cls.attributes:
        if isinstance(attribute, Divider):
            attribute['name'] = ('_' * index)
            attribute['shortName'] = ('_' * index)
            index += 1
    assert (len(set(cls.attributes)) == len(cls.attributes)), ("One or more attributes in '%s' was found more than once" % cls.__name__)
    attributes = {attr['name']: attr for attr in cls.attributes}

    def findAttribute(self, name):
        return attributes.get(name)

    def findMObject(self, name):
        return attributes.get(name)['mobject']

    def findPlug(self, node, name):
        try:
            mobj = attributes.get(name)['mobject']
            return om.MPlug(node, mobj)
        except KeyError:
            return None
    cls.findAttribute = findAttribute
    cls.findMObject = findMObject
    cls.findPlug = findPlug
    cls.find_attribute = findAttribute
    cls.find_mobject = findMObject
    cls.find_plug = findPlug
    cls.log = logging.getLogger(cls.__name__)
    return super(MetaNode, cls).__init__(*args, **kwargs)