Created
June 25, 2024 08:58
-
-
Save mrzor/17b908267456e97de349940083d89c01 to your computer and use it in GitHub Desktop.
A Python list for prestidigitators
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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