def __setattr__(self, key: str, value: Any) -> None:
        """ Attribute setter.  Any attribute that is part of the members list or not validated passes.  Otherwise
        setting is only allowed if the class level _strict mode is False

        :param key:
        :param value:
        :return:
        """
        # Note: The initial startswith below is the only way we can SEE _members or _context...

        if key.startswith('_') or key in self._members or self._context.unvalidated_parm(key):
            if key in self._members:
                vtype = self._members[key]
                # Empty can be used to "remove" any type
                if value is Empty:
                    self[key] = Empty
                # None is a valid value for some types (JSGNull, AnyType) but removes the other types
                elif value is None:
                    self[key] = self._map_jsg_type(key, value, vtype)
                else:
                    self[key] = self._jsg_type_for(key, value, vtype)
            else:
                cur_val = self.__dict__.get(key)
                if cur_val is None or not issubclass(type(cur_val), JSGString):
                    self[key] = value
                else:
                    self[key] = cur_val.__class__(value)
        elif self._strict:
            raise ValueError("Unknown attribute: {}={}".format(key, value))
        else:
            super().__setattr__(key, value)
def __setattr__ ( self , key : str , value : Any ) -> None : if key . startswith ( '_' ) or key in self . _members or self . _context . unvalidated_parm ( key ) : if key in self . _members : vtype = self . _members [ key ] if value is Empty : self [ key ] = Empty elif value is None : self [ key ] = self . _map_jsg_type ( key , value , vtype ) else : self [ key ] = self . _jsg_type_for ( key , value , vtype ) else : cur_val = self . __dict__ . get ( key ) if cur_val is None or not issubclass ( type ( cur_val ) , JSGString ) : self [ key ] = value else : self [ key ] = cur_val . __class__ ( value ) elif self . _strict : raise ValueError ( "Unknown attribute: {}={}" . format ( key , value ) ) else : super ( ) . __setattr__ ( key , value )
Attribute setter.  Any attribute that is part of the members list or not validated passes.  Otherwise
        setting is only allowed if the class level _strict mode is False

        :param key:
        :param value:
        :return: