如何在枚举中添加方法?

Mak*_*e42 2 python enums

我想在我的枚举中添加一个方法.

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]
Run Code Online (Sandbox Code Playgroud)

不起作用.代替

Kerneltype.aslist()
Run Code Online (Sandbox Code Playgroud)

我目前要做的

[kt[1] for kt in ob.Kerneltype.__members__.items()]
Run Code Online (Sandbox Code Playgroud)

Ash*_*ary 6

classmethod当您从类而不是 Enum 成员调用它们时,您应该使用装饰器定义方法。

@classmethod
def aslist(cls):
    return [cls.tube, cls.subspace_KDE, cls.deltashift, cls.dist_sens_via_mass_1]

@classmethod
def fromint(cls, int):
    return cls.aslist()[int]
Run Code Online (Sandbox Code Playgroud)

正如其他评论中所提到的,你aslist()不需要方法,你可以直接使用list()在默认情况下蜜饯定义的顺序和它。唯一的区别是它不返回别名。

>>> list(Kerneltype)
[<Kerneltype.tube: 0>, <Kerneltype.subspace_KDE: 1>, <Kerneltype.deltashift: 2>, <Kerneltype.dist_sens_via_mass_1: 3>]
Run Code Online (Sandbox Code Playgroud)


pok*_*oke 6

您创建了一个实例方法,因此aslist只存在于实例上Kerneltype(即枚举成员本身).你需要一个classmethod:

@classmethod
def aslist(cls):
    return [cls.tube, cls.subspace_KDE, cls.deltashift, cls.dist_sens_via_mass_1]
Run Code Online (Sandbox Code Playgroud)
>>> Kerneltype.aslist()
[<Kerneltype.tube: 0>, <Kerneltype.subspace_KDE: 1>, <Kerneltype.deltashift: 2>, <Kerneltype.dist_sens_via_mass_1: 3>]
Run Code Online (Sandbox Code Playgroud)