Python 中的 Getter 和 Setter

17 Mar 2025 | 5 分钟阅读

Python 中的 Getters 和 Setters 与其他 **OOPs** 语言有所不同。Getter 和 Setter 的主要用途是确保面向对象程序中的数据封装。与许多其他面向对象语言不同,Python 中的私有变量不是隐藏字段。一些 **OOPs** 语言使用 getter 和 setter 方法来实现 **数据封装**。我们希望将一个对象类的属性隐藏起来,不让其他类随意修改数据。

OOPs 语言 中,Getter 和 Setter 用于检索和更新数据。Getter 检索对象当前的属性值,而 Setter 更改对象属性的值。在本文中,我们将通过示例讨论 Python 中的 Getter 和 Setter。

Python 中的 Getter 是什么?

Getter 是在面向对象编程 (OOPS) 中用于访问类私有属性的方法。Python 中的 setattr() 函数对应于 Python 中的 getattr() 函数。它会修改对象属性的值。

Python 中的 Setter 是什么?

Setter 是用于设置属性值的方法。在面向对象编程中,它对于设置类中私有属性的值非常有用。

通常,Getter 和 Setter 主要用于确保 OOPS 中的数据封装。

使用普通函数实现 Getter 和 Setter 功能

如果我们指定普通的 get()set() 方法来实现 Getter 和 Setter 功能,则不会有特殊的实现。

示例

让我们举例说明如何使用普通函数来实现 Getter 和 Setter 功能。

输出: 执行上述代码后,我们将得到如下输出

输出是

19
19

说明:

为了实现这种功能,上述代码中的 get age()set age() 函数像标准函数一样运行,不会影响 Getter 和 Setter。Python 有一个特殊的函数 property()。

使用 property() 函数实现 Getter 和 Setter 功能

在 Python 中,property() 是一个内置函数,用于创建和返回一个 property 对象。property 对象有三个方法:getter()setter()delete()。在 Python 中,property() 函数接受四个参数:property(fget, fset, fdel, doc)。fget 函数用于检索属性值。fset 函数用于设置属性值。fdel 函数用于删除属性值。doc 用于为属性提供文档字符串。

示例

让我们举例说明如何使用 property() 函数来实现 Getter 和 Setter 功能。

输出: 执行上述代码后,我们将得到如下输出

输出是

setter method
getter method
18

说明

在上面的程序中,只有一个打印语句。输出包含三行,因为调用了 setter 方法 set age(),并且调用了 getter 方法 get age()。因此,age 是一个 property 对象,有助于保护私有变量的访问。

使用 @property 装饰器实现 Getter 和 Setter 功能

我们在上一种方法中使用了 property() 函数来实现 Getter 和 Setter 功能。但是,正如本文前面提到的,Getter 和 Setter 也用于验证属性值的获取和设置。另一种强制执行 property 函数的方法是使用装饰器。@property 是 Python 的一个内置装饰器。任何装饰器的主要目标是修改类方法或属性,以便类用户不必更改他们的代码。

示例

让我们举例说明如何使用 @property 装饰器来实现 Getter 和 Setter 功能。

输出: 执行上述代码后,我们将得到如下输出

输出是

setter method called
getter method called
25

说明

前面的代码演示了如何使用 @property 装饰器 来构建 Pythonic 的 Getter 和 Setter。上面的例子作为验证代码,如果我们尝试使用小于 20 的值来初始化 age,将引发 ValueError

使属性私有化

现在,我们将看到如何使方法私有化,以便外部调用函数无法操作其中的变量。它们只能由类中定义的函数来操作。它们通过在前面加上两个下划线来私有化。

示例

让我们举例说明如何在程序中使属性私有化。

输出: 执行上述代码后,我们将得到如下输出

49

从私有方法读取值

要从私有方法读取值,我们必须使用 getter 方法。不使用 getter 方法,我们就无法使用 property 方法来访问私有属性值。让我们举例说明这种方法。

示例

输出: 执行上述代码后,我们将得到如下输出

输出是

27
2020

示例

让我们再举一个例子来创建一个带有属性的类。从中我们可以创建几个对象。

这些对象上没有设置 (Emp) 属性。我们可以直接设置它,但这并不是一个好方法。我们而是创建了两个方法:getEmp()setEmp()

输出: 执行上述代码后,我们将得到如下输出

输出是

Designer
Developer

下一个主题Python 枚举类