如何将 getter 和 setter 添加到枚举变量?

How can I add a getter and a setter to an enum variable?

我有一个小的(为了这个问题的目的而简化的)class例如:

class ShortStatus1:
    class Shutter(Enum):
        CLOSED = '0', ErrorType.NONE
        OPEN = '1', ErrorType.NONE

    def __init__(self):
        self.shutter = ShortStatus1.Shutter.OPEN

如果可能的话,我想向变量本身添加一个 getter 和一个 setter,例如:

sh = ToTLMShort()
sh.shutter.set(ShortStatus1.Shutter.CLOSED)
print(sh.shutter.get())

将打印 Shutter.CLOSED

我遇到的问题是我不明白如何将 self.shutter 包含在 getter 和 setter 中(我想避免 sh.set_shutter(ShortStatus1.Shutter.CLOSED) 签名(如果可能))。
setter 很重要,因为它让我有可能确保给定的变量是正确的类型并避免用户错误(该代码将被许多具有不同专业水平的人使用)

有没有一种简单的方法可以做到这一点,或者我是否需要添加一个额外的 class 来封装变量?

可以在shutter class属性前使用@property装饰器和_

def __init__(self):
    self._shutter = ShortStatus1.Shutter.OPEN

@property
def shutter(self):
    return self._shutter

@shutter.setter
def shutter(self, value):
    self._shutter = value

那么,如果你这样做:

if __name__ == '__main__':
    a = ShortStatus1()
    print(a.shutter)
    a.shutter = ShortStatus1.Shutter.CLOSED
    print(a.shutter)

输出:

Shutter.OPEN
Shutter.CLOSED