我想在我的枚举中添加一个方法。
Kerneltype.aslist()
不起作用。而不是
[kt[1] for kt in ob.Kerneltype.__members__.items()]
我目前要做的事情
cordova plugin add cordova-plugin-autostart@latest
答案 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)