各位大佬,求救一个 Python 问题,关于 Enum 的使用

18 小时 53 分钟前
 yanyuechuixue

我写了一个程序,其中有一段是这样的:

class Detector(Enum):
    BBO = "BBO"
    DECIGO = "DECIGO"

    @property
    def ell_max(self) -> int:
        ell_max = {
            Detector.BBO: 30,
            Detector.DECIGO: 30,
        }
        return ell_max[self]

我现在需要在一个循环中改变 ell_max 的值,也就是不设置为 30 了,而是设置成其他值。我尝试过定义一个 def set_ell_max(self, ell_max) 但最终失败了。我的失败品如下:

class Detector(Enum):
    BBO = "BBO"
    DECIGO = "DECIGO"
    _ell_max_values = {
        DECIGO: 30,
        BBO: 30,
    }
    @property
    def ell_max(self) -> int:
        return self._ell_max_values[self]
    
    def set_ell_max(self, value: int):
        self._ell_max_values[self] = value

这种情况下,当我使用 Detector.BBO.ell_max 的时候,会提示 ```TypeError: 'Detector' object is not subscriptable


请问各位大哥,我该怎么处理呀?
390 次点击
所在节点    Python
6 条回复
laonger
10 小时 32 分钟前
self._ell_max_values[self.name]
laonger
10 小时 32 分钟前
self._ell_max_values[self.name]

试试?
yanyuechuixue
9 小时 2 分钟前
@laonger 还是不行。。

``` python
58 @property
59 def ell_max(self) -> int:
---> 60 return self._ell_max_values[self.name]

TypeError: 'Detector' object is not subscriptable
```

我想通过类继承的办法定义一个新的类,结果也不好使,说 Enum 的不允许再次继承。。。
lyxxxh2
8 小时 10 分钟前
虽然我没用过 Python 的 Enum, 但是找 self 下标??? 第一次见。
```
def set_ell_max(self, value: int):
self._ell_max_values[DECIGO] = value
return self
```
ma46
7 小时 43 分钟前
私有名称才不会转为枚举类型, 所以变量名要用双下划线

class Detector(Enum):
BBO = "BBO"
DECIGO = "DECIGO"

__ell_max_values = {
DECIGO: 30,
BBO: 30,
}

@property
def ell_max(self) -> int:
print(self.__ell_max_values)
return self.__ell_max_values[self.value]

def set_ell_max(self, value: int):
self.__ell_max_values[self.value] = value
yanyuechuixue
7 小时 19 分钟前
@ma46 谢谢!学到了,原来如此!

十分感谢大佬!!

问题解决!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1092241

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX