专栏首页码生python @property 设置只读属性 重写 getter setter 方法

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

做过 iOS OC 开发的都知道

@property NSString * name;

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

s.name = "xiaoming"

print(s.name);

>>> xiaoming

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

- (NSString*)name {
    return _name;
}

- (void)setName:(NSString *)name {
    // 此处可以对name做一些校验和处理
    _name = name
}

同样 python 中也可以实现这种 set get

同样是使用 @property 修饰

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 方法即可

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 方法,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MessageHandler 高级用法二:原生调用JS 实现回调

    在 上一篇中 我们实现了原生和JS 的方法调用,这篇解决一下在 APP 中调用JS方法时怎么含有 JS 的回调

    onety码生
  • Supervisor资料

    onety码生
  • Django 常用工具 import 常用模块

    from rest_framework import routers, serializers, viewsets

    onety码生
  • jsp基础知识(基本的语法及原理)

         jsp 语法分为三种不同的类型: (1)  编译器指令: 类如: <%@ page import="java.io.*"%> (2)  脚本语法:  ...

    Gxjun
  • Python批量检查网页是否被注入其他页面

    代码思路:对于给定的文件夹中所有网页文件,读取其内容,然后使用正则表达式检查该文件中是否包含iframe框架,如果有的话就返回文件名和iframe代码,表示是一...

    Python小屋屋主
  • 隐含层权重参数的初始化方式的对比实验

    全1或全0初始化 全1或全0初始化的训练效果 ? After 858 Batches (2 Epochs): Validation Accuracy 11...

    linxinzhe
  • linux服务器搭建之路7-通过rdesktop远程连接win10

    个人有两台电脑,一个win10,一个centos7,coding主要在centos7上,但是其他主要在win10上,刚开始用win10远程连接centos,但是...

    锦小年
  • mybatis教程6(逆向工程)

      简单点说,就是通过数据库中的单表,自动生成java代码。Mybatis官方提供了逆向工程,可以针对单表自动生成mybatis代码(mapper.java\m...

    用户4919348
  • 重温统计学之七——抽样分布

    中心极限定理帮助我们了解以下事实,无论总体的分布是否为正态: 1. 样本均值的均值和总体均值近似 2. 样本均值的标准偏差总是等于标准误差 3. 样本容量...

    统计学家
  • Attribute "XXX" has already been defined

    一种:在atrr.xml文件中定义了同一种属性造成的.另一种:引入了不同的资源库,恰好又在这两个库里都写了同一个属性.

    战神伽罗

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动