如何在枚举中添加方法?

时间:2017-05-23 16:18:13

标签: python enums

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

Kerneltype.aslist()

不起作用。而不是

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

我目前要做的事情

cordova plugin add cordova-plugin-autostart@latest

4 个答案:

答案 0 :(得分:6)

您创建了一个实例方法,因此aslist仅存在于Kerneltype的实例上(即枚举成员本身)。您需要a classmethod代替:

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

答案 1 :(得分:2)

您应该使用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]

正如其他人在评论中提到的那样,您的aslist()方法不是必需的,您可以直接使用list() on it,默认情况下它会保留定义的顺序。唯一的区别是它没有返回别名。

>>> list(Kerneltype)
[<Kerneltype.tube: 0>, <Kerneltype.subspace_KDE: 1>, <Kerneltype.deltashift: 2>, <Kerneltype.dist_sens_via_mass_1: 3>]

答案 2 :(得分:1)

你错过了classmethod装饰者:

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

答案 3 :(得分:0)

您所做的事情是尝试通过self访问枚举值,而您应该像通常通过枚举那样访问它们。

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)