Мне нужна пользовательская функция __reverse__
для моего класса, которую я развертываю на App Engine, поэтому она должна работать с Python 2.5
. Можно ли использовать __future__
импорт или обходной путь?
Подклассы list
не будут работать, так как мне нужно, чтобы мой класс был подклассом dict
.
EDIT :
Использование OrderedDict
не решит проблемы, поскольку клавиши dict
не совпадают с ключами list
.
Это объект, который я пытаюсь создать:
Мой объект должен предоставлять те же атрибуты, что и list
, то есть поддержка iter(obj)
и reverse(obj)
.
Элементы должны быть экземплярами специального стороннего класса.
Каждый элемент связан с ключом.
Внутренне, необходимо получить доступ к этим объектам, используя их ключи. Вот почему я поместил их в карту.
Я пересмотрел свою реализацию на list
подкласс вместо dict
подкласса, так что вот что у меня сейчас:
class Foo(list):
pat = {}
def __init__(self):
for app in APPS: # these are strings
obj = SpecialClass(app)
self.append(obj)
self.pat[app] = obj
def __getitem__(self, item):
# Use object as a list
if isinstance(item, int):
return super(Foo, self).__getitem__(item)
# Use object as a dict
if item not in self.pat:
# Never raise a KeyError
self.pat[item] = SpecialClass(None)
return self.pat[item]
def __setitem__(self, item, value):
if isinstance(item, int):
return self.pat.__setitem__(item, value)
return super(Foo).__setitem__(item, value)
РЕДАКТИРОВАТЬ 2:
Теперь, когда мой класс является подклассом list
, моя проблема решена.