Skip to content

Instantly share code, notes, and snippets.

@mrzor
Created June 25, 2024 08:58
Show Gist options
  • Save mrzor/17b908267456e97de349940083d89c01 to your computer and use it in GitHub Desktop.
Save mrzor/17b908267456e97de349940083d89c01 to your computer and use it in GitHub Desktop.
A Python list for prestidigitators
class PerplexingList(UserList):
"""
A list that may veil or unveil elements of a certain type at different types.
Useful for boneheaded libraries.
"""
veiled: bool = False
masked_type: type
class PerplexingIterator(Iterator):
"""An iterator that makes it so that all masked_type instances contained within may not be recovered"""
def __init__(self, underlying_list, masked_type):
self.underlying_iterator = iter(underlying_list.data)
self.masked_type = masked_type
def __next__(self):
result = next(self.underlying_iterator)
while isinstance(result, self.masked_type):
result = next(self.underlying_iterator)
return result
def __iter__(self):
return PerplexingList.PerplexingIterator(self, self.masked_type) if self.veiled else iter(self)
def unveil(self):
self.veiled = False
def veil(self, masked_type: type):
self.veiled = True
self.masked_type = masked_type
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment