def __setattr__(self, name, value):
        bad_ids = dir(self)
        #Add some just for causion
        bad_ids.append('__call__')
        bad_ids.append('__dir__')

        if name in self.__PROTECTED__:
            raise KeyError('key %r is read only' % name)

        if name not in bad_ids:
            if self.__dict__.get('__PARENT__'):
                #Do all the black magic with making sure my parents exist
                parent, pname = self.__dict__.pop('__PARENT__')
                parent[pname] = self

            #Get rid of cached future children that match name
            if name in self.__CACHE__:
                del self.__CACHE__[name]

            dict.__setitem__(self, name, self.__wrap(value))
        else:
            print("%s is an invalid identifier" % name)
            print(bad_ids % "identifiers can not be %r")
            raise KeyError('bad identifier')

    #Object.key gets
dataset/ETHPy150Open facebook/pyaib/pyaib/util/data.py/Object.__setattr__/swapped operands of `%`