Python 3.x 如何向枚举变量添加getter和setter?
我有一个小的(为了这个问题的目的简化的)类,例如:Python 3.x 如何向枚举变量添加getter和setter?,python-3.x,enums,getter-setter,Python 3.x,Enums,Getter Setter,我有一个小的(为了这个问题的目的简化的)类,例如: class ShortStatus1: class Shutter(Enum): CLOSED = '0', ErrorType.NONE OPEN = '1', ErrorType.NONE def __init__(self): self.shutter = ShortStatus1.Shutter.OPEN sh = ToTLMShort() sh.shutter.set
class ShortStatus1:
class Shutter(Enum):
CLOSED = '0', ErrorType.NONE
OPEN = '1', ErrorType.NONE
def __init__(self):
self.shutter = ShortStatus1.Shutter.OPEN
sh = ToTLMShort()
sh.shutter.set(ShortStatus1.Shutter.CLOSED)
print(sh.shutter.get())
如果可能的话,我想向变量本身添加一个getter和setter,例如:
class ShortStatus1:
class Shutter(Enum):
CLOSED = '0', ErrorType.NONE
OPEN = '1', ErrorType.NONE
def __init__(self):
self.shutter = ShortStatus1.Shutter.OPEN
sh = ToTLMShort()
sh.shutter.set(ShortStatus1.Shutter.CLOSED)
print(sh.shutter.get())
将打印<代码>快门。关闭
我的问题是,我不明白如何用这种方式将self.shutter
封装在getter和setter中(如果可能,我希望避免sh.set\u shutter(ShortStatus1.shutter.CLOSED)
签名)。setter很重要,因为它使我能够确保给定的变量是正确的类型,并避免用户错误(代码将被许多具有不同专业水平的人使用)
是否有一种简单的方法来实现此目的,或者我是否需要添加一个额外的类来封装变量?
您可以使用
@property
装饰器和
在shutter
类属性前面:
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
您可以使用
@属性
装饰器和
在快门
类属性前面:
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
你能解释一下你的问题/困惑吗?使用getter/setter的惯用方法是在类定义中应用
property
,ShortStatus1
。不需要添加额外的类,并且它与作为枚举的属性类型没有关系。可能的重复可以解释您的问题/困惑吗?使用getter/setter的惯用方法是在类定义中应用property
,ShortStatus1
。不需要添加额外的类,它与作为枚举的属性类型没有关系。