掌握Python property装饰器巧妙管理类的属性

 更新时间:2024年01月10日 10:39:54   作者:涛哥聊Python  
property 是Python中的一个内置装饰器,它用于创建属性并允许开发者定义特定的操作,例如获取(getter)、设置(setter)和删除(deleter)属性值的方法,本文为大家讲解如何利用这种特性使我们能更好地管理类的属性

1. 创建只读属性

使用 property 可以创建只读属性,即只允许获取值,不允许修改。

class MyClass:
    def __init__(self, _value):
        self._value = _value

    @property
    def value(self):
        return self._value

obj = MyClass(10)
print(obj.value)  # 输出:10

# 试图修改只读属性会引发 AttributeError
# obj.value = 20

2. 创建可读写属性

通过 @property 装饰器的 @value.setter 方法,可以定义属性的设置方式。

class MyClass:
    def __init__(self, _value):
        self._value = _value

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, new_value):
        self._value = new_value

obj = MyClass(10)
print(obj.value)  # 输出:10

obj.value = 20
print(obj.value)  # 输出:20

3. 创建可删除属性

通过 @property 装饰器的 @value.deleter 方法,可以定义属性的删除方式。

class MyClass:
    def __init__(self, _value):
        self._value = _value

    @property
    def value(self):
        return self._value

    @value.deleter
    def value(self):
        del self._value

obj = MyClass(10)
print(obj.value)  # 输出:10

del obj.value
# 试图访问已删除的属性会引发 AttributeError
# print(obj.value)

4. 实际应用 – 数据验证

property 还可以用于数据验证。例如,确保属性值符合特定条件。

class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius

    @property
    def celsius(self):
        return self._celsius

    @celsius.setter
    def celsius(self, value):
        if value < -273.15:
            raise ValueError("Temperature below absolute zero is not possible.")
        self._celsius = value

temp = Temperature(25)
print(temp.celsius)  # 输出:25

temp.celsius = -300  # 引发 ValueError

总结

property 特性为Python中的属性管理提供了灵活性和可控性。通过其设置、获取和删除方法,我们能够精细地控制属性的行为。这使得属性操作更加安全和可靠,并能够确保数据的完整性和合法性。深入理解和灵活运用 property 特性可以让我们更好地管理类的属性,确保程序的健壮性和稳定性。

以上就是掌握Python property装饰器巧妙管理类的属性的详细内容,更多关于Python property管理类属性的资料请关注脚本之家其它相关文章!

相关文章

  • python爬虫爬取淘宝商品信息

    python爬虫爬取淘宝商品信息

    这篇文章主要为大家详细介绍了python爬虫爬取淘宝商品信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 推荐技术人员一款Python开源库(造数据神器)

    推荐技术人员一款Python开源库(造数据神器)

    今天小编给大家推荐一款Python开源库,技术人必备的造数据神器!非常不错,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-07-07
  • 浅谈tf.train.Saver()与tf.train.import_meta_graph的要点

    浅谈tf.train.Saver()与tf.train.import_meta_graph的要点

    这篇文章主要介绍了浅谈tf.train.Saver() 与tf.train.import_meta_graph的要点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • PyTorch手写数字数据集进行多分类

    PyTorch手写数字数据集进行多分类

    这篇文章主要介绍了PyTorch手写数字数据集进行多分类,损失函数采用交叉熵,激活函数采用ReLU,优化器采用带有动量的mini-batchSGD算法,需要的朋友可以参考一下
    2022-03-03
  • Python写的Discuz7.2版faq.php注入漏洞工具

    Python写的Discuz7.2版faq.php注入漏洞工具

    这篇文章主要介绍了Python写的Discuz7.2版faq.php注入漏洞工具,全自动的一款注入工具,针对Discuz7.2版,需要的朋友可以参考下
    2014-08-08
  • python求最大值,不使用内置函数的实现方法

    python求最大值,不使用内置函数的实现方法

    今天小编就为大家分享一篇python求最大值,不使用内置函数的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python获取中国节假日数据记录入JSON文件

    Python获取中国节假日数据记录入JSON文件

    项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:Python获取中国节假日数据记录入JSON文件
    2025-04-04
  • Python2.x与3​​.x版本有哪些区别

    Python2.x与3​​.x版本有哪些区别

    这篇文章主要介绍了Python2.x与3​​.x版本有哪些区别,文中讲解非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Python全栈之协程详解

    Python全栈之协程详解

    这篇文章主要为大家介绍了Python全栈之协程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 主流Python语音转文字(STT)库实战指南

    主流Python语音转文字(STT)库实战指南

    语音转文字的核心是通过信号处理、特征提取和模式识别将声波转换为文本,下面这篇文章主要介绍了主流Python语音转文字(STT)库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-01-01

最新评论