Как переопределить класс Enum для возврата значения члена вместо объекта члена? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть класс enum для ярлыков общих системных путей:

    _HOME = str(Path().home())

    class Shortcuts(Enum):
        RECENTS = _HOME + '/Recents'
        DESKTOP = _HOME + '/Desktop'
        DOCUMENTS = _HOME + '/Documents'
        DOWNLOADS = _HOME + '/Downloads'
        APPLICATIONS = '/Applications'
        LIBRARY = '/Library'
        SYSTEM = '/System'
        USERS = '/Users'
        TRASH = _HOME + '/.Trash'

Я хочу иметь возможность доступа к элементам, к которым возвращается их значение вместо объекта-члена.

    print(Shortcuts.RECENTS)
    > '/Users/username/Recents'

Я пытался переопределить __ getitem __ , __ getattr ___ и __ getattribute __ методы суперкласса, но я получаю ошибки только при их реализации без изменений.

def __getattribute__(self, item): #type error: str obj not callable
    return item

def __getattribute__(self, item): #type error: str obj not callable
    return item.value

def __getitem__(self, item): #returns same object if item.value, item.name, ..etc
    return item 

Чего мне не хватает?

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете сделать это, перегрузив метод __repr__ следующим образом:

def __repr__(self):
   return self._value_
...