code: def wells(self, *args) -> List[Well]:
          
          if not args:
              res = self._wells
          elif isinstance(args[0], int):
              res = [self._wells[idx] for idx in args]
          elif isinstance(args[0], str):
              res = [self.wells_by_index()[idx] for idx in args]
          else:
              raise TypeError
          return res
docs: Accessor function used to generate a list of wells in top -> down,
          left -> right order. This is representative of moving down `rows` and
          across `columns` (e.g. 'A1', 'B1', 'C1'...'A2', 'B2', 'C2')
  
          With indexing one can treat it as a typical python
          list. To access well A1, for example, simply write: labware.wells()[0]
  
          Note that this method takes args for backward-compatibility, but use
          of args is deprecated and will be removed in future versions. Args
          can be either strings or integers, but must all be the same type (e.g.:
          `self.wells(1, 4, 8)` or `self.wells('A1', 'B2')`, but
          `self.wells('A1', 4)` is invalid.
  
          :return: Ordered list of all wells in a labware