Сегодня на меня снизошло озарение и сказало написать класс Group, зачем его писать озарение не объяснило, но я не стал противиться и написал. Что с ним делать и зачем он нужен я не знаю) Может кому понадобится. При желании можно допилить до полной совместимости с классом list.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Group(object):
def __init__(self, *obj_list):
self.obj_list = obj_list
self.skip = False
def _create_sub(self, objs, name):
def sub_func(*args, **kwargs):
return map(lambda x: x.__getattribute__(name)(*args, **kwargs), objs)
return sub_func
def __getattribute__(self, name):
try:
return object.__getattribute__(self, name)
except AttributeError:
buf = []
for obj in self.obj_list:
try:
getattr(obj, name)
buf.append(obj)
except NameError:
if not self.skip:
raise NameError
return self._create_sub(buf, name)
def __str__(self):
return str(self.obj_list)
def __repr__(self):
return self.obj_list.__repr__()
if __name__ == '__main__':
a, b = [3, 1, 4, 2], [7, 5, 8, 6]
c, d = ['c', 'a', 'd', 'b'], ['h', 'f', 'g', 'e']
g = Group(a, b, c, d)
print 'Before group sort:\t', g
g.sort(reverse=True)
print 'After group sort:\t', g
g.reverse()
print 'After group reverse:\t', g
print 'Length of each object:\t', g.__len__()
print 'List of pop objects:\t', g.pop()
print 'After pop objects:\t', g