首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在枚举变量中添加getter和setter?

如何在枚举变量中添加getter和setter?
EN

Stack Overflow用户
提问于 2019-07-25 09:37:58
回答 1查看 1K关注 0票数 0

我有一个小班(为了这个问题而简化),例如:

代码语言:javascript
复制
class ShortStatus1:
    class Shutter(Enum):
        CLOSED = '0', ErrorType.NONE
        OPEN = '1', ErrorType.NONE

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

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

代码语言:javascript
复制
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很重要,因为它使我有可能确保给定的变量是正确的类型,并避免用户错误(代码将被许多具有非常不同专业水平的人使用)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-25 09:53:29

您可以在@property类属性前面使用_装饰符和_

代码语言:javascript
复制
def __init__(self):
    self._shutter = ShortStatus1.Shutter.OPEN

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

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

那么,如果你这样做:

代码语言:javascript
复制
if __name__ == '__main__':
    a = ShortStatus1()
    print(a.shutter)
    a.shutter = ShortStatus1.Shutter.CLOSED
    print(a.shutter)

输出:

代码语言:javascript
复制
Shutter.OPEN
Shutter.CLOSED
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57198840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档