How to add a method to an enum?

Viewed 22656

I would like to add a method to my enum.

class Kerneltype(Enum):
    tube = 0
    subspace_KDE = 1
    deltashift = 2
    dist_sens_via_mass_1 = 3

    def aslist(self):
        return [self.tube, self.subspace_KDE, self.deltashift, self.dist_sens_via_mass_1]

    def fromint(self, int):
        return self.aslist()[int]

does not work. Instead of

Kerneltype.aslist()

I currently have to do

[kt[1] for kt in ob.Kerneltype.__members__.items()]
4 Answers

The issue with what you do is trying to access enum values via self whereas you should access them as you would normally via the enum.

from enum import Enum

class V(Enum):
    V1 = (1, 2)
    V2 = (2, 3)
    def getKey(v: float):
        return [k for k in list(V) if v > k.value[0] and v < k.value[1]]

V.getKey(1.1) #  [<V.V1: (1, 2)>]
V.getKey(1.1)[0].value # (1, 2) 
Related