РЕДАКТИРОВАТЬ: Согласно этот ответ , хорошая идея для вызова super()
, потому что в противном случае поведение может быть неопределенным. Я предполагаю, что мой вопрос в этом случае действительно так, как получается, что мой код работает, даже не вызывая его? Это похоже на выключатель света, работающий без подключения электричества. Так что меня больше интересует механика происходящего, а не просто «да добавь это» или «нет, это не обязательно».
Я работаю со следующим кодом python для реализации кэша LRU. Это подклассы OrderedDict
для поддержки методов для кэша, а именно get
и put
. Это работает отлично, но я запутался - почему мне не нужно вызывать конструктор родителя?
Согласно этому ответу , мне нужно было бы позвонить super().__init__()
, но я этого не делаю (попробуйте сами).
Мой вопрос: по какому механизму мой подкласс знает, как вставить значения в себя, если ничего не было инициализировано?
from collections import OrderedDict
class LRUCache(OrderedDict):
def __init__(self, capacity):
self.capacity = capacity
def get(self, key):
if key not in self:
return -1
self.move_to_end(key)
return self[key]
def put(self, key, value):
if key in self:
self.move_to_end(key)
elif len(self) == self.capacity:
self.popitem(last=False)
self[key] = value