code: def _init_exons(self):
          
          exon_starts = [self.chrom_start + int(s)
                         for s in self.bed_tuple.blockStarts.strip(',').split(',')]
          exon_sizes = list(map(int, self.bed_tuple.blockSizes.strip(',').split(',')))
  
          # get chromosome intervals
          exons = [(exon_starts[i], exon_starts[i] + exon_sizes[i])
                   for i in range(len(exon_starts))]
          no_utr_exons = self._filter_utr(exons)
          self.exons = no_utr_exons
          self.exon_lens = [e[1] - e[0] for e in self.exons]
          self.num_exons = len(self.exons)
          self.cds_len = sum(self.exon_lens)
          self.five_ss_len = 2*(self.num_exons-1)
          self.three_ss_len = 2*(self.num_exons-1)
          self._init_splice_site_pos()
docs: Sets a list of position intervals for each exon.
  
          Only coding regions as defined by thickStart and thickEnd are kept.
          Exons are stored in the self.exons attribute.