前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python @property 设置只读属性 重写 getter setter 方法

python @property 设置只读属性 重写 getter setter 方法

作者头像
onety码生
发布2018-11-21 10:24:05
2.5K0
发布2018-11-21 10:24:05
举报
文章被收录于专栏:码生

做过 iOS OC 开发的都知道

代码语言:javascript
复制
@property NSString * name;

拥有该属性 name 的类的实例对象都可以使用 .(点) 方法设置和获取name

代码语言:javascript
复制
s.name = "xiaoming"

print(s.name);

>>> xiaoming

同时在 .m 文件中可以重写 name 的 getset 方法

代码语言:javascript
复制
- (NSString*)name {
    return _name;
}

- (void)setName:(NSString *)name {
    // 此处可以对name做一些校验和处理
    _name = name
}
同样 python 中也可以实现这种 set get

同样是使用 @property 修饰

代码语言:javascript
复制
class Student(object):

    # get 方法采用 @property 修饰
    @property
    def score(self):
        return self._score

    # set 方法采用 属性名称.setter 修饰
    @score.setter
    def score(self, value):

        if not isinstance(value, int):
            raise ValueError('score must be integer!')

        if value < 0 or value > 100:
            raise ValueError('score must between 0 - 100!')
        self._score = value

s = Student()

s.score = 100

print(s.score)

我们在 score 的 setter 方法中做了一些校验

如果我们只需要 get 方法怎么做

只需要使用 @property 声明 get 方法即可

代码语言:javascript
复制
class Frame(object):
    __slots__ = ('x', 'y', 'width', 'height')

    @property
    def size(self):
        return (self.width, self.height);

f = Frame()

f.x = 0

f.y = 0

f.width = 100

f.height = 200

print(f.size)

>>> (100, 200)
小结

@property广泛应用在类的定义中,可以让调用者写出简短的代码,就可以重写属性的 get 和 set 方法,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.08.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 同样 python 中也可以实现这种 set get
  • 如果我们只需要 get 方法怎么做
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档