Python 从attribute到property详解

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用post访问restful服务接口的方法

    在Python中,我们可以使用requests库进行POST请求,访问RESTful服务接口。本文将介绍如何使用requests库进行POST请求,并提供两个示例。 1. 使用requests库进行POST请求 使用requests库进行POST请求非常简单。我们只需要使用requests库的post函数,并指定URL和数据即可。以下是一个示例,演示如何使用…

    python 2023年5月15日
    00
  • Python中使用haystack实现django全文检索搜索引擎功能

    让我们来详细讲解如何使用Haystack实现Django全文检索搜索引擎功能。 简介 Haystack是一个免费的开源搜索引擎框架,它可以轻松地在Django中实现全文检索搜索引擎功能。Haystack支持多个搜索后端,包括Solr、Elasticsearch和Whoosh等。 安装Haystack 在Django项目中使用Haystack需要先安装它。可以…

    python 2023年6月6日
    00
  • python 如何获取元素在array中的下标

    获取元素在array中的下标,通常可以通过Python内置模块numpy和list自带的方法来实现。 一、使用numpy模块 numpy.where()方法 numpy.where(condition, [x, y]) 该方法返回满足条件的元素下标。 示例: import numpy as np arr = np.array([1, 2, 3, 4, 5])…

    python 2023年6月5日
    00
  • python如何删除文件中重复的字段

    Python可以通过内置的函数和库来删除文件中重复的字段,具体步骤如下: 1. 读取文件数据 首先需要以只读模式打开文件,并将文件内容读取到内存中的列表或字典中。这可以使用Python内置的open()函数来实现,语法如下: with open(‘file_name.txt’, ‘r’) as f: data = f.read() 其中,’file_name…

    python 2023年6月3日
    00
  • 基于Python实现面向对象版学生管理系统

    基于Python实现面向对象版学生管理系统 简介 本文将介绍如何用 Python 实现一个简单的学生管理系统,通过该系统,可以实现学生信息的增、删、改、查等基本功能。 本系统采用面向对象的编程方式,实现了可重用、易扩展的目的。 设计 类的设计 Student 类:表示学生,包含学生的基本信息,如姓名、学号、分数等 属性: name:学生姓名 id:学生编号 …

    python 2023年5月30日
    00
  • Python集成学习之Blending算法详解

    以下是关于“Python集成学习之Blending算法详解”的完整攻略: 简介 Blending算法是一种集成学习方法,它将多个基模型的预测结果进行加权平均,得到最终的预测结果。在本教程中,我们将介绍Blending算法的原理和实现方法,包括数据集划分、基模型训练、Blending模型训练等。 数据集划分 Blending算法需要将原始数据集划分为训练集和测…

    python 2023年5月14日
    00
  • 如何基于Python + requests实现发送HTTP请求

    以下是关于如何基于Python+requests实现发送HTTP请求的攻略: 如何基于Python+requests实现发送HTTP请求 在Python中,使用requests库可以方便地发送HTTP请求。以下是如何基于Python+requests实现发送HTTP请求的攻略。 发送GET请求 使用requests库发送GET请求时,需要指定请求的URL和请…

    python 2023年5月14日
    00
  • Python实战实现爬取天气数据并完成可视化分析详解

    Python实战实现爬取天气数据并完成可视化分析详解 在本攻略中,我们将介绍如何使用Python爬取天气数据,并使用Python的数据可视化库Matplotlib和Seaborn完成可视化分析。我们将提供两个示例,用于说明如何使用Python爬取天气数据和完成可视化分析。 步骤1:获取天气数据 在使用Python爬取天气数据之前,我们需要获取天气数据的URL…

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