If each numpy file contains multiple images, you could use a logic, where the Dataset would open only a single numpy array and index it until all samples were used. Once this numpy array was completely used, you would open the next one and assign it to a class attribute to keep it open.
Shuffling the data would work for the different numpy arrays, but could yield a bad performance on the “image level”, since your code would be opening and closing the numpy arrays multiple times.