Python 从attribute到property详解

yizhihongxing

Python 从attribute到property详解

在Python中,对象的属性可以分为两种:attribute和property。attribute是对象中的数据成员,而property是通过一定的计算或方法获取的数据成员。

attribute

attribute是对象中的数据成员,直接访问得到的值就是attribute的值。

示例代码:

class Person:
    def __init__(self, name):
        self.name = name

person = Person('Alice')
print(person.name) # 直接访问属性

输出结果为:Alice

property

property是通过一定的计算或方法获取的数据成员,使用property装饰器可以将方法转换为属性。

示例代码:

class Circle:
    def __init__(self, radius):
        self.radius = radius

    @property
    def area(self):
        return 3.14 * self.radius ** 2

circle = Circle(5)
print(circle.area) # 直接访问属性

输出结果为:78.5

上述示例中,area是一个方法,但使用@property装饰器后可以直接访问circle.area,就像访问attribute一样。

此外,可以使用@property装饰器定义只读属性,以及结合setter和deleter方法实现可读可写的属性。

示例代码:

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value.title()

person = Person('alice')
print(person.name) # 直接访问属性

person.name = 'Bob'
print(person.name) # 直接访问属性

person._name = 'eve'
print(person.name) # 直接访问属性

del person.name
print(person.name) # 直接访问属性

输出结果为:

Alice
Bob
Eve
Traceback (most recent call last):
  File "test.py", line 18, in <module>
    print(person.name) # 直接访问属性
AttributeError: 'Person' object has no attribute '_name'

上述示例中,name是可读可写的属性,使用setter方法将传入的值转换为首字母大写的形式,使用deleter方法删除属性后再次访问会抛出AttributeError异常。

总结

Python中的attribute和property都是对象的数据成员,但property是能够进行一定计算或方法调用得到的值。使用@property装饰器可以将方法转换为属性, setter和deleter方法配合@property可实现可读可写的属性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 从attribute到property详解 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • Python用摘要算法生成token及检验token的示例代码

    首先,我们需要了解什么是摘要算法以及什么是Token。摘要算法是一种将任意长度的数据映射为固定长度摘要值的算法,通常用于数据完整性校验和数字签名等场景。而Token可以理解为一种加密过的字符串,里面包含了一定的信息,如用户ID、角色等,用于验证用户身份和权限。 生成Token的基本流程是将需要加密的信息先进行摘要算法哈希处理,再将哈希值与一定的盐进行混淆加密…

    python 2023年6月3日
    00
  • 对Python 内建函数和保留字详解

    Python 内建函数和保留字详解 Python 是一个强大的编程语言,拥有丰富的内建函数和关键字。了解这些内建函数和关键字,将有助于您开发高效、可维护的 Python 代码。 Python 内建函数 Python 内建函数是指在 Python 语言中已经预定义好的函数,可以直接调用。 以下是一些常见的 Python 内建函数: type() type() …

    python 2023年6月5日
    00
  • 如何解决pycharm调试报错的问题

    如何解决PyCharm调试报错的问题 PyCharm是一款常用的Python集成开发环境(IDE),它提供了强大的调试功能,可以帮助我们快速定位和解决代码中的问题。但是,在使用PyCharm进行调试时,有时会遇到各种报错问题。本文将详细讲解如何解决PyCharm调试报错的问题,包括问题的原因、解决方法和两个示例。 问题原因 在PyCharm调试过程中,我们可…

    python 2023年5月13日
    00
  • python实现多线程采集的2个代码例子

    下面是详细的攻略: Python实现多线程采集 前言 对于一些需要收集数据的任务,并发的采集方式无疑是对效率的一大提升。Python语言提供了多线程编程的支持,本文将会介绍两种使用Python实现多线程采集的方式并提供相应的代码。 代码实现 代码一 第一种实现方式相对来说比较简单理解,我们可以直接使用Thread类来创建新的线程并运行。 import thr…

    python 2023年5月19日
    00
  • python 通过xml获取测试节点和属性的实例

    当我们进行软件测试时,常常需要读取XML文件中的测试节点和属性。Python提供了多种库来处理XML文件,其中最常用的是ElementTree库。接下来,我将为您提供一个完整的攻略来使用Python通过XML获取测试节点和属性。 第一步:导入ElementTree库 使用Python处理XML文件的第一步是导入ElementTree库。可以通过以下代码来导入…

    python 2023年5月14日
    00
  • centos6.7 安装python2.7、pip2.7、easy_install-2.7的方法

    CentOS 6.7默认安装的python版本是2.6,但是许多应用和库需要使用2.7版本及以上的python版本。因此,本文将介绍如何在CentOS6.7上安装python2.7、pip2.7和easy_install-2.7。 安装依赖 在安装python2.7、pip2.7和easy_install-2.7之前,需要先安装一些必需的依赖库和工具。打开命…

    python 2023年5月14日
    00
  • Python利用Beautiful Soup模块搜索内容详解

    BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历文档树,并提供了一些有用的方法来搜索和操作文档树。以下是Python利用BeautifulSoup模块搜索内容的详细攻略: 安装BeautifulSoup 在使用BeautifulSoup之前,需要先安装BeautifulSoup。可以使用pip…

    python 2023年5月14日
    00
  • 举例讲解Python中的list列表数据结构用法

    在Python中,List是一种常用的数据类型,它可以用来存储多个元素。本文将深入讲解Python中List列表的数据结构用法,并供两个示例说明。 创建List 可以使用方括号来创建一个List,例如: my_list = [1, 2, 3, 4, 5] 上述代码演示了如何创建一个List。 访问List中的元素 可以使用索引来访问List的元素,例如: m…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部