如何将 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
我有一个小的(为了这个问题的目的而简化的)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