Существует метод магии Python __setitem__
для назначения =
типам последовательностей. Существуют ли магические методы для расширенного задания +=
на уровне контейнера? Операция, похоже, изящно разбивается на расширенное назначение типа элемента. Это логично. Но для всего остального есть волшебный метод, я думал, что для этих операторов должен быть набор методов для типа последовательности. Я пропустил это?Магический метод для `self [key] + = value`?
Приложение представляет собой своего рода базу данных. Подумайте об осуществлении __getitem__
с помощью SELECT и __setitem__
с INSERT. Должно быть что-то вроде __additem__
и т. Д. Для UPDATE, правильно?
from __future__ import print_function
class Item(object):
def __init__(self, value):
self.value = value
def __str__(self):
return "Item " + str(self.value)
def __iadd__(self, other):
print("Item iadd", self, other)
return Item(self.value + "+" + other.value)
class Container(object):
def __getitem__(self, key):
print("Container getitem", key)
return Item(key)
def __setitem__(self, key, value):
print("Container setitem", key, value)
return self
def __additem__(self, key, value):
print("Container additem would be nice", key, value)
return self
Вот SELECT:
>>> c = Container()
>>> _ = c['key']
Container getitem key
Вот ВСТАВИТЬ:
>>> c['key'] = Item('other')
Container setitem key Item other
Как реализовать UPDATE? Без разбивки на SELECT, и INSERT:
>>> c['key'] += Item('other')
Container getitem key
Item iadd Item key Item other
Container setitem key Item key+other
Так есть способ реализации дополненного назначения иначе, чем шаги разбитых? Не помещая все поведение в класс Item?
Вы можете вырезать и вставить код выше в интерпретатор Python, или попробовать его на этом Python скрипкой: http://pythonfiddle.com/add-item-for-sequence/
related question показывает декомпиляция self[key] += value