set a default value for key

        this is different than dict's setdefault because it will set default either
        if the key doesn't exist, or if the value at the key evaluates to False, so
        an empty string or a None value will also be updated

        :param key: string, the attribute to update
        :param val: mixed, the attributes new value if key has a current value
            that evaluates to False

def setdefault(self, key, val):
        """
        set a default value for key

        this is different than dict's setdefault because it will set default either
        if the key doesn't exist, or if the value at the key evaluates to False, so
        an empty string or a None value will also be updated

        :param key: string, the attribute to update
        :param val: mixed, the attributes new value if key has a current value
            that evaluates to False
        """
        if not getattr(self, key, None):
            setattr(self, key, val)