Advertisement
Guest User

python __filter__

a guest
Dec 3rd, 2012
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.04 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. from abc import ABCMeta, abstractmethod
  3. import random
  4.  
  5. #Filterable lets you use duck typing while still allowing use of isinstance
  6. class Filterable(metaclass=ABCMeta):
  7.     @classmethod
  8.     def __subclasshook__(cls, C):
  9.         if cls is Filterable:
  10.             if hasattr(C, "__filter__"):
  11.                 return True
  12.         return NotImplemented
  13.  
  14.  
  15. def filter(function, sequence):
  16.     if isinstance(sequence, Filterable):
  17.         return sequence.__filter__(function)
  18.     else:
  19.         return __builtins__.filter(function, sequence)
  20.  
  21.  
  22. class Items:
  23.     def __init__(self, items):
  24.         self.items = items
  25.  
  26.     def __filter__(self, function):
  27.         ''' Insane version of filter that ignores the given function '''
  28.        
  29.         for item in self.items:
  30.             if random.random() >= 0.5:
  31.                 yield item
  32.  
  33.  
  34. if __name__ == "__main__":
  35.     items = Items([1, 2, 3, 44, 32, 'a'])
  36.     print(isinstance(items, Filterable))
  37.     for item in filter(None, items):
  38.         print(item)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement