Python Property 装饰器2025年3月17日 | 阅读 7 分钟 在本教程中,我们将学习 Python 中的 property 装饰器。之前,我们已经讨论过 Python 中的装饰器;如果您熟悉装饰器,请在继续之前阅读本教程。 让我们对 property 装饰器做一个介绍。 Python @property 装饰器让我们通过一个例子来理解它——假设我们有一个类 Employee,它有三个属性 first_name、last_name 和 department_name。我们还有一个函数 email(),它使用员工的 first_name 和 last_name 为其生成电子邮件地址。让我们看下面的代码。 示例 - 现在创建类的对象并调用 email() 函数。 输出 First Name is: Bruce Last Name is: Banner Full Name is: Bruce Banner [email protected] 在上面的代码中,我们定义了三个属性 first_name、last_name 和 department_name,而 email() 是派生属性。 full_name 被声明为变量,email() 被声明为函数。当我们运行程序时,我们会得到 first_name、last_name 和 full_name。full_name 是从 first_name 和 last_name 派生出来的,所以 email 也是。现在,让我们对程序做一些更改。 将 first_name 更改为 Natasha 并打印 full_name 和 email 将产生以下输出。 输出 Full Name is Bruce Banner [email protected] 我们可以看到 first name 已经改变,email 也自动改变了。尽管 email() 是我们在需要返回 email 时调用的函数,而 first_name 在对象初始化时设置,但 full_name 并没有改变。我们可以通过为 email() 创建的 full_name 创建另一个函数来修复这个问题。 示例 - 输出 First Name is: Bruce Last Name is: Banner Bruce Banner [email protected] After changing the first name: Natasha Banner [email protected] 我们得到了改变的 full_name 和更新的 email,但这并不是解决这个问题的 Pythonic 方式。这时 @property 装饰器就发挥作用来解决这样的问题了。 使用 @property 装饰器property 装饰器从指定的 getter 和 setter 返回类的属性,并将它们作为参数进行删除。我们将使用 @property 装饰器来解决这个问题。现在让我们看看上面使用 @property 装饰器的例子。 示例 - 输出 First Name is: Bruce Last Name is: Banner Full Name is: Bruce Banner Email is: [email protected] After changing the first name: Full Name is: Natasha Banner Email is: [email protected] 解释 - 在上面的代码中,@property 装饰器用于 full_name 函数,现在这个函数已经变成了属性,并且由于 @property 装饰器,它也可以用作 getter。 将 setter 和 deleter 方法与 @property 装饰器一起使用应用 @property 装饰器的函数称为 getter。在前面的例子中,full_name 充当 getter。在本节中,我们将理解 getter 和 setter。 顾名思义,setter 方法设置属性的值,而 deleter 方法删除属性。让我们为 full_name 属性实现一个 setter 和 getter 方法。 示例 - 输出 21 Rishabh Pant KL Rahul Traceback (most recent call last): File "d:/Python Project/property.py", line 557, in 解释 - 在上面的代码中,我们初始化了一个类 Student,并在构造函数中传递了 name 和 age。首先,我们创建了应用了 @property 装饰器的 age() 方法;它将获取 age 并返回。然后我们为 age 创建了 setter 方法,我们在其中检查用户输入的值是否为负数,如果是则引发错误。然后我们为 age 创建了 deleter 方法。我们对 name 属性也做了同样的事情。在 setter 方法中,我们检查用户输入的 name 是否为空字符串,如果是则引发错误,否则设置给定的 name。 示例 - 2 输出 Fullname is: Steve Rogers Email address is: [email protected] Fullname of obj is: Bruce Rogers And email address: [email protected] New Fullname of obj is: Peter Parker Deleted the full_name 在上面的代码中,我们使用 property 装饰器创建了 getter、setter 和 deleter。 property() 函数我们可以使用 property() 函数来创建 getter、setter 和 deleter,而不是使用 @property 装饰器。语法如下。 语法 - 参数 -
它从给定的 getter、setter 和 deleter 返回一个 property 属性。 让我们理解下面的例子。 示例 - 输出 Full Name is: Nick Fury Email Address: [email protected] Full Name is: Nick Fury Email Address: [email protected] New Full Name is: Bruce Banner Deleted the full_name. 我们也可以用单行代码实现这些方法。 full_name = property(full_name_getter, full_name_setter, full_name_deleter) 重要提示我们不需要为代码中的每个属性都创建所有三个方法。我们可以通过仅包含 getter 方法来定义只读属性。我们也可以省略 deleter 方法,而使用 getter 和 setter。如果我们想在实例创建时设置属性,或者它应该在类内部修改,我们可以省略 setter 方法。 用户可以根据他们工作的内容自由选择任何方法。 结论本教程详细介绍了 property 装饰器及其示例。property() 方法有助于创建 getter、setter 和 deleter 方法。我们可以使用 @property 装饰器语法来定义属性,这种方式更兼容、更直接。它被认为是定义 getter、setter 和 deleter 的“pythonic”方式。 使用属性,我们可以在不影响类的内部实现的情况下修改它。getter、setter 和 deleter 有助于避免直接访问或修改数据。 |
在本教程中,我们将学习并发以及如何使用并发加速 Python 程序。我们将了解并发方法与 asyncio 模块的比较。我们还将讨论什么是并行性以及一些并发方法。什么是并发?并发是...
阅读 12 分钟
Playfair 密码是一种多字母替换密码,由查尔斯·惠斯通爵士于 1854 年发明。它使用 5x5 的字母网格(通常称为密钥方块)进行加密和解密。密钥方块由一个关键字构建,其中关键字...
阅读 6 分钟
Python GUI(图形用户界面)指的是允许用户与软件应用程序进行交互的视觉元素和智能组件。GUI 提供了一种直观且用户友好的方式来访问应用程序的功能,通常包括窗口、按钮、菜单、文本框等...
7 分钟阅读
sqrt() 函数是 Python 中用于执行与数学相关的操作的内置函数。sqrt() 函数用于返回任何导入数字的平方根。在本教程中,我们将讨论如何在 Python 中使用 sqrt() 函数。语法:math.sqrt(N) 参数:“N”可以是任何...
阅读 3 分钟
在本教程中,我们将学习如何使用 Matplotlib 在子图中包含图例。创建图后可以使用 legend() 函数添加图例。语法:子图中图例的语法是:axes[position].legend(loc = ''),其中 loc 用于位置。方法:以下是我们将介绍的方法...
阅读 3 分钟
为了在以后使用,开发者有时可能希望通过网络传输复杂的对象命令来保存其对象的内部状态。开发者可以使用Python标准库支持的Pickle模块的序列化过程来实现这一点。我们将...
阅读 15 分钟
Python 是最灵活的语言,几乎用于所有行业,包括游戏开发、Web 开发、机器学习、人工智能和 GUI 应用程序。该游戏是使用 pygame 包开发的,这是 Python 的内置功能。对 Python 编程有一个基本了解,...
阅读 12 分钟
在本教程中,我们将探讨如何使用 PyQt5 开发用户表单。用户表单本质上是一个对话框,它在输入用户数据时为用户提供了额外的控制和易用性。有时有必要创建用户表单,而...
5 分钟阅读
很多时候,我们想通过程序从邮件中检索信息或数据,但又不想将邮件下载到我们的设备上。当我们只想获取信息并查找某些特定数据时,也会发生这种情况...
阅读 8 分钟
在本教程中,我们将学习 Python Delorean 模块,该模块用于简化 datetime 对象。我们需要 datetime 模块来处理不同的时间和日期。有时这可能有点复杂和具有挑战性,在 Python 中处理 datetime 是...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India