Skip to content

Instantly share code, notes, and snippets.

@rgov
Last active April 28, 2020 15:16
Show Gist options
  • Save rgov/c0ba23aa709c3b1467f07fe329c8a528 to your computer and use it in GitHub Desktop.
Save rgov/c0ba23aa709c3b1467f07fe329c8a528 to your computer and use it in GitHub Desktop.
class MyMemoryview:
def __init__(self, mv):
self._mv = memoryview(mv)
def __getitem__(self, i):
value = self._mv.__getitem__(i)
if isinstance(value, memoryview):
return MyMemoryview(value)
return value
def __setitem__(self, i, value):
return self._mv.__setitem__(i, value)
def __getattribute__(self, attr):
whitelist = ('__class__', '_mv')
if attr in whitelist:
return object.__getattribute__(self, attr)
value = getattr(object.__getattribute__(self, '_mv'), attr)
if callable(value):
def wrapper(*args, **kwargs):
result = value(*args, **kwargs)
if isinstance(result, memoryview):
return type(self)(result)
return result
return wrapper
return value
mmv = MyMemoryview(b'1234567890')
assert isinstance(mmv[2:4], MyMemoryview)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment