Я пишу dict
, в котором в качестве ключей используются только кортежи натуральных чисел.Если ключ неизвестен и один из элементов кортежа - 1
, поиск должен вернуть значение по умолчанию 0
.Любой другой неизвестный ключ должен вызывать KeyError
.
Это прекрасно работает:
class zeroDict(dict):
'''
If key not in dict and an element of the tuple is
a 1, impute the value 0.
'''
def __init__self():
super().__init__()
def __getitem__(self, key):
try:
return super().__getitem__(key)
except KeyError:
if 1 in key:
return 0
else:
raise
Это не:
class zDict(dict):
'''
If key not in dict and an element of the tuple is
a 1, impute the value 0.
'''
def __init__self():
super().__init__()
def __getitem__(self, key):
try:
return super()[key]
except KeyError:
if 1 in key:
return 0
else:
raise
Когда я пытаюсь прочитать значение изzDict
Я получаю TypeError: 'super' object is not subscriptable
.
Единственная разница между реализациями заключается в том, что zeroDict
говорит
return super().__getitem__(key)
и zDict
говорит
return super()[key]
Однако help(dict.__getitem__)
печатает
__getitem__(...)
x.__getitem__(y) <==> x[y]
, который, кажется, говорит, что эти два утверждения эквивалентны.Что здесь происходит?