Мне нужна пользовательская функция __reverse__
для моего класса, которую я развертываю в App Engine, поэтому она должна работать с Python 2.5
. Есть ли __future__
импорт или обходной путь, который я мог бы использовать?Переопределить обратное (...) в Python 2.5
Подкласс 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)
EDIT 2:
Теперь, когда мой class является подклассом list
, моя проблема решена.
Я что-то пропустил; теперь, когда ваш класс является подклассом списка, почему вы не переопределяете и не используете list.reverse() hmmm? – mouad
@tzzzzz Теперь я могу использовать 'reverseed()'. Обратите внимание, что 'list.reverse()' изменяет список ** на месте **, что не то, что я хочу. Я только хотел поддержать встроенный 'reverseed()'. –