Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Array(dict):
- reflect = []
- operations = []
- def __init__(self, mapping, **kwargs):
- super().update(mapping)
- Array.reflect = dir(Array)
- def __getattribute__(self, item):
- """ Returns instance attribute or instance value """
- return super().__getattribute__(item) if item in Array.reflect \
- else self.__getitem__(item)
- def __setattr__(self, item, value):
- """ Sets attribute or value """
- if item not in Array.reflect:
- super().update({item: value})
- else:
- super().__setattr__(item, value)
- def map(self, func):
- def wrapper():
- for item in self.items():
- yield func(*item)
- self.operations += [wrapper()]
- return self
- def reduce(self, fn = None):
- def wrapper():
- carry = next(iter(self.values())).__class__()
- for item in self.items():
- if callable(fn):
- carry += fn(*item)
- else:
- _, value = item
- carry += value
- yield carry
- self.operations += [wrapper()]
- return self
- def __iter__(self):
- def wrapper():
- for ops in self.operations:
- for item in ops:
- yield item
- return wrapper()
- def add333(key, value):
- return value + "333"
- def show():
- a = Array({'value': 'asdasd', 'key': 'asdasd'})
- a.hej = '123'
- it = a.map(add333).reduce()
- for item in it:
- print(item)
- if __name__ == "__main__":
- show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement