Python属性的get和set方法

类的属性通常可以在init方法里定义:

class Animal(object):
    def __init__(self, height):
        self.height = height

但是这样定义不能校验传入的参数,所以通常要把参数设置为私有变量,在变量名前加下划线:

class Animal(object):
    def __init__(self, height):
        self._height = height

然而这样属性在外部就不可读写,这时需要增加get、set方法:

class Animal(object):
    def get_height(self):
        return self._height

    def set_height(self, value):
        if not isinstance(value, float):
            raise ValueError("高度应该是小数")
        if value < 0 or value > 300:
            raise ValueError("高度范围是0到300cm")
        self._height = value
d = Animal()
d.set_height(250.9)
print(d.get_height()) --------------> 250.9

但是这样在外部调用时代码很繁琐,在这里用装饰器@property简化get、set方法

class Animal(object):
    @property
    def height(self):
        return self._height
    @height.setter
    def height(self, value):
        if not isinstance(value, float):
            raise ValueError("高度应该是小数")
        if value < 0 or value > 300:
            raise ValueError("高度范围是0到300cm")
        self._height = value

d = Animal()
d.height = 250.9
print(d.height) --------------> 250.9
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,186评论 6 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,860评论 2 9
  • 一叶落地 芬芳不在 何处寻芳踪 悲凉之处 竟是天高人远 无处话悲凉
    绒晴阅读 183评论 0 0
  • 午后 在阳光的抚摸下 来到窗前 坐在书桌上 轻轻地 翻开一页书 就是翻开一段历史 翻开一个经历 翻开一段人生 翻开...
    点点星光阅读 144评论 0 0