def _filter_attrs(cls, attrs):
        """
        attrs: { attr_name: attr_value }
        if __attr_whitelist__ is True:
            only attr in __attr_accessible__ AND not in __attr_protected__
            will pass
        else:
            only attr not in __attr_protected__ OR in __attr_accessible__
            will pass
        """
        if cls.__attr_whitelist__:
            whitelist = cls.__attr_accessible__ - cls.__attr_protected__
            return {k: v for k, v in attrs.items() if k in whitelist}
        else:
            blacklist = cls.__attr_protected__ - cls.__attr_accessible__
            return {k: v for k, v in attrs.items() if k not in blacklist}
def _filter_attrs ( cls , attrs ) : if cls . __attr_whitelist__ : whitelist = cls . __attr_accessible__ - cls . __attr_protected__ return { k : v for k , v in attrs . items ( ) if k in whitelist } else : blacklist = cls . __attr_protected__ - cls . __attr_accessible__ return { k : v for k , v in attrs . items ( ) if k not in blacklist }
attrs: { attr_name: attr_value }
        if __attr_whitelist__ is True:
            only attr in __attr_accessible__ AND not in __attr_protected__
            will pass
        else:
            only attr not in __attr_protected__ OR in __attr_accessible__
            will pass