• 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 方法,该属性就变成了具有读写功能的属性
     


     

  • 相关阅读:
    DT Paint Effects工具(一)
    class12:async 和 await
    基于白鲸优化的BP神经网络(分类应用) - 附代码
    【Spring Boot 集成应用】Actuator监控功能使用
    从React源码角度看useCallback,useMemo,useContext
    uniapp 富文本以及移动端富文本的展示问题
    5、Python中的变量和表达式:变量的定义、赋值和数据类型转换
    会话跟踪技术概述 [JavaWeb][Servlet]
    基于Cortex-M的RTOS上下文切换详解及FreeRTOS实例
    开源大数据比对平台设计与实践—dataCompare
  • 原文地址:https://blog.csdn.net/adminwg/article/details/127131479