Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- from abc import ABCMeta, abstractmethod
- import random
- #Filterable lets you use duck typing while still allowing use of isinstance
- class Filterable(metaclass=ABCMeta):
- @classmethod
- def __subclasshook__(cls, C):
- if cls is Filterable:
- if hasattr(C, "__filter__"):
- return True
- return NotImplemented
- def filter(function, sequence):
- if isinstance(sequence, Filterable):
- return sequence.__filter__(function)
- else:
- return __builtins__.filter(function, sequence)
- class Items:
- def __init__(self, items):
- self.items = items
- def __filter__(self, function):
- ''' Insane version of filter that ignores the given function '''
- for item in self.items:
- if random.random() >= 0.5:
- yield item
- if __name__ == "__main__":
- items = Items([1, 2, 3, 44, 32, 'a'])
- print(isinstance(items, Filterable))
- for item in filter(None, items):
- print(item)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement