<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_mutation_type(self, mut_type=''):
 """Sets the mutation type attribute to a single label based on attribute flags. Kwargs: mut_type (str):
 value to set self.mut_type """

        if mut_type:
            # user specifies a mutation type
            self.mutation_type = mut_type
        else:
            # mutation type is taken from object attributes
            if not self.is_valid:
                # does not correctly fall into a category
                self.mutation_type = 'not valid'
            elif self.unknown_effect:
                self.mutation_type = 'unknown effect'
            elif self.is_no_protein:
                self.mutation_type = 'no protein'
            elif self.is_missing_info:
                # mutation has a ?
                self.mutation_type = 'missing'
            else:
                # valid mutation type to be counted
                if self.is_lost_stop:
                    self.mutation_type = 'Nonstop_Mutation'
                elif self.is_lost_start:
                    self.mutation_type = 'Translation_Start_Site'
                elif self.is_synonymous:
                    # synonymous must go before missense since mutations
                    # can be categorized as synonymous and missense. Although
                    # in reality such cases are actually synonymous and not
                    # missense mutations.
                    self.mutation_type = 'Silent'
                elif self.is_missense:
                    self.mutation_type = 'Missense_Mutation'
                elif self.is_indel:
                    self.mutation_type = 'In_Frame_Indel'
                elif self.is_nonsense_mutation:
                    self.mutation_type = 'Nonsense_Mutation'
                elif self.is_frame_shift:
                    self.mutation_type = 'Frame_Shift_Indel'