Интересно, есть ли разумный простой способ разрешить работу этого кода (с незначительными изменениями).
class Info(object):
@attr("Version")
def version(self):
return 3
info = Info()
assert info.version == 3
assert info["Version"] == 3
В идеале, код также должен выполнять некоторое кэширование / запоминание, например, использовать lazyатрибуты, но я надеюсь выяснить это сам.
Дополнительная информация:
Причина, по которой я хочу предоставить два интерфейса для доступа к одной и той же информации, заключается в следующем.
Я хотел бы иметь класс, похожий на диктовку, который использует ленивые ключи.Например, info["Version"]
должен вызывать и кэшировать другой метод и прозрачно возвращать результат.Я не думаю, что это работает только с диктовками, поэтому мне нужно создавать новые методы.Сами по себе методы тоже не годятся, потому что есть некоторые атрибуты, которые проще определить с помощью чистого словарного синтаксиса.
Вероятно, в любом случае это не лучшая идея ...