我在寫一個模擬映射對象的類。它具有以下功能。如何使__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__
掛鉤僅對擴展字典的類有用。在我的情況下,這是沒有意義的,我應該只在try/except內部實現缺少的功能。
有沒有辦法讓__getitem__
自動撥打__missing__
在KeyError
?
它看起來像它的只適用於字典的子類'如果字典的一個子類定義__missing__' – Falmarri
你可以只定義與所期望的行爲mixin類的方法''__getitem__'' – Zah
'__missing__'不是一般的「__getitem__'不起作用時發生了什麼」掛鉤。這是'dict .__ getitem__'特別注意的事情,實現它只對'dict'子類有意義。 – user2357112