Я пишу класс, который эмулирует объект сопоставления. Он выполняет следующие функции.Как сделать __missing__ автоматически вызванным __getitem__ KeyError
class MyClass(object):
def __init__(self):
self.vars = {}
def __getitem__(self,key):
return self.vars[key]
def __missing__(self,key):
return key
Я думаю, что призыв к obj[missing_key]
также называют __missing__
. Но так как я переопределен __getitem__
я должен сделать это
def __getitem__(self,key):
try:
return self.vars[key]
except KeyError as e:
return self.__missing__(key)
кажется, что __missing__
крюк не обернуты в вызовы __getitem__
, но вместо того, чтобы встроенный в __getitem__
. Это делает крюк __missing__
полезным только для классов, расширяющих dict. В моем случае это не имеет смысла, и я должен просто реализовать недостающую функциональность внутри try/except.
Есть ли способ сделать __getitem__
автоматически называть __missing__
на KeyError
?
Похоже, что это применимо только на подклассах Словаря 'Если подкласс Словаря определяет метод __missing__' – Falmarri
Вы можете просто определить класс подмешать с желаемым поведением для '' __getitem__'' – Zah
'__missing__' не является общим", что происходит, когда '__getitem__' не работает". Это именно то, что ищет 'dict .__ getitem__', и его реализация имеет смысл только для подклассов' dict'. – user2357112