• python中的@property装饰器


    在python类中既要保护类的封装特性,又要让开发者可以使用“对象.属性”的方式操作操作类属性,除了使用 property() 函数,Python 还提供了 @property 装饰器。通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”小括号。


    @property 的语法格式如下:

    1. @property
    2. def 方法名(self)
    3.     代码块


    例如,定义一个动物类,并定义用 @property 修饰的方法操作类中的__color私有属性,代码如下:

    1. class Animal:
    2. def __init__(self, color):
    3. self.__color = color
    4. @property
    5. def color(self):
    6. return self.__color
    7. animal = Animal('red')
    8. print(animal.color)

    直接通过animal.color获取属性值
    运行结果为:

    red


    上面程序中,使用 @property 修饰了 color 方法,这样就使得该方法变成了 Animal 类的 getter 方法。需要注意的是,如果类中只包含该方法,那么 color 属性将是一个只读属性。
    也就是说,在使用 Animal 类时,无法对 color 属性重新赋值.

    1. animal.color = 'blue'
    2. #
    3. Traceback (most recent call last):
    4. File "F:\pychrom_python\python\@property装饰器.py", line 15, in
    5. animal.color = 'blue'
    6. AttributeError: can't set attribute


    而要想实现修改 color 属性的值,还需要为 color 属性添加 setter 方法,就需要用到 setter 装饰器,它的语法格式如下:

    1. @被property装饰后的方法名.setter
    2. def 方法名(self, value):
    3.     代码块


    例如,为 Animal 类中的 color 属性添加 setter 方法,代码如下:

    1. class Animal:
    2. def __init__(self, color):
    3. self.__color = color
    4. @property
    5. def color(self):
    6. return self.__color
    7. @color.setter
    8. def color(self, value):
    9. self.__color = value
    10. animal = Animal('red')
    11. animal.color = 'blue'
    12. print(animal.color)


    再次运行如下代码:

    1. animal = Animal('red')
    2. animal.color = 'blue'
    3. print(animal.color)


    运行结果为:
    修改后的颜色为: blue
    这样,color属性就有了 getter setter 方法,该属性就变成了具有读写功能的属性
     


     

  • 相关阅读:
    药师帮再冲刺上市:研发远低于营销,债务高企,张步镇为董事长
    白话 Pulsar Bookkeeper 的存储模型
    [H5动画制作基础]随机四位数值
    【前端知识】Three 学习日志(五)—— 点光源辅助观察
    kafka的安装和使用
    【Linux】OS和进程概念
    C#核心12——面向对象七大原则
    网络的救命稻草:重传机制如何确保数据顺利传输?
    约瑟夫环实现
    设计模式(三):抽象工厂模式
  • 原文地址:https://blog.csdn.net/adminwg/article/details/127131479