如何重写Enum类以返回成员值而不是成员对象?

时间:2019-02-14 18:38:03

标签: python enums override

我有一个用于通用系统路径快捷方式的枚举类:

    _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 :(得分:0)

您可以通过像这样重载__repr__方法来实现此目的:

def __repr__(self):
   return self._value_