В object1
определения класса,
def __getattr__(self, key):
return self.get(key)
Любая попытка разрешить имя свойства, метода или поля, которое фактически не существует в самом объекте, будет передана в __getattr__
.
Если у вас нет доступа к определению класса, то есть это что-то вроде словаря, оберните его в классе. Для словаря вы можете сделать что-то вроде:
class DictWrapper(object):
def __init__(self, d):
self.d = d
def __getattr__(self, key):
return self.d[key]
Обратите внимание, что KeyError будет вызываться, если ключ недействителен; соглашение, однако, должно вызвать AttributeError (спасибо, С. Лотт!). Вы можете повторно вызвать KeyError как AttributeError, например, при необходимости:
try:
return self.get(key)
except KeyError as e:
raise AttributeError(e)
Также помните, что если объекты, которые вы возвращаете из __getattr__
, также являются, например, словарями, вам нужно будет также обернуть их.