from abc import ABC, abstractmethod import numpy as np import six class BaseMixin(ABC): @abstractmethod def get_example(self, i): s = super(BaseMixin, self) if hasattr(s, "get_example"): return s.get_example(i) def __getitem__(self, index): if isinstance(index, slice): current, stop, step = index.indices(len(self)) return [self.get_example(i) for i in six.moves.range(current, stop, step)] elif isinstance(index, list) or isinstance(index, np.ndarray): return [self.get_example(i) for i in index] else: return self.get_example(index)