code: def parts(self):
          
          def get_alpha(alpha_index, alphabet):
              if alpha_index >= len(alphabet):
                  lead = get_alpha(alpha_index / len(alphabet), alphabet)
                  trail = alphabet[alpha_index % len(alphabet)]
                  return "{}{}".format(lead, trail)
              return alphabet[alpha_index]
  
          max_digits = 10 ** self.num_digits - 1
          alpha_index = abs(self.number) / max_digits
          alpha_number = abs(self.number) % max_digits
          # Note the 1 digit leap e.g. AA99 + 1 == AB01 (not AB00)
          if not alpha_number and abs(self.number):
              alpha_number = max_digits
              alpha_index -= 1
  
          alpha = get_alpha(alpha_index, self.alphabet)
          if len(alpha) > self.num_chars:
              raise ValueError("Out of bounds. Requires {} chars, {} set"
                               .format(len(alpha), self.num_chars))
  
          return alpha, alpha_number
docs: Returns the alphanumeric parts (chars + digits) of this Alphanum