Класс с '__getitem__' не имеет метода 'get' - PullRequest
0 голосов
/ 26 апреля 2019

Я понимаю, что у класса без метода get нет метода get.Как лучше всего добавить метод get в класс, реализующий __getitem__ [без шаблона]?

Я пытался:

class Foo():
    def __getitem__(self, item):
        ...

    get = dict.get  # TypeError

Но Python жалуется:

TypeError: descriptor 'get' for 'dict' objects doesn't apply to 'Foo' object

Очевидно, что можно использовать collections.UserDict, но я надеялся быть ленивым (потому чторазрешение дорогое) и не заполняет данные элемента до тех пор, пока к ним не будет получен доступ (и они не будут кэшированы по ключу на объекте Foo).

Мысли?

1 Ответ

0 голосов
/ 26 апреля 2019

Не то, чтобы метод get был слишком сложным, я надеялся, что в python есть встроенные функции для уменьшения этого вида шаблонов ...

class Foo():
    ...
    def get(self, item, default):
        try:
            return self[item]
        except KeyError as err:
            return default
...