0

I'm working on a class that reads bytes from a mmap and I'd like to add the ability to "rewind" a given read. I feel like a decorator could help here, but I'm not sure how to implement it.

Here's how it looks:

class ByteReader:
  def __init__(self, data: bytes):
    self.data = data

  def read_bytes(self, n_bytes: int, rewind: bool=False):
    if rewind:
      start_position = self.data.tell()

    read_data = self.data.read(n_bytes)

    if rewind:
      self.data.seek(start_position)
    
    return read_data

I know I could create a rewind function that takes a function as an argument, like this ...

  def rewind(self, func):
    start_position = self.data.tell()
    data = func()
    self.data.seek(start_position)
    return data

... but I feel like there's a better way to implement this.

(btw I'm not really worried if this isn't the best way to accomplish this particular task, I'm more interested in learning how to use decorators!)

steadynappin
  • 409
  • 3
  • 14

0 Answers0