Python中的Getter和Setter
为了实现数据封装的目的,大多数面向对象的语言都使用getter和setter方法。这是因为我们希望将对象类的属性隐藏起来,以免其他类的其它方法意外修改数据。
顾名思义,getter方法用于访问私有属性或获取私有属性的值,setter方法用于更改或设置私有属性的值。
访问私有属性
下面我们编写代码创建一个类,初始化它并访问它的变量,而无需创建任何附加方法。
示例
class year_graduated: def __init__(self, year=0): self._year = year # Instantiating the class grad_obj = year_graduated() #Printing the object print(grad_obj) #Printing the object attribute print(grad_obj.year)
输出
运行上述代码将得到以下结果:
<__main__.year_graduated object at 0x00F2DD50> 0
第一个print语句给出创建的对象的详细信息,第二个print语句给出私有属性的默认值。
使用getter和setter
在下面的示例中,我们将创建一个类,初始化它,然后为每个属性添加getter和setter方法。然后通过实例化类并使用这些getter和setter方法来访问这些变量。因此,您可以将您的逻辑隐藏在setter方法中。
示例
class year_graduated: def __init__(self, year=0): self._year = year # getter method def get_year(self): return self._year # setter method def set_year(self, a): self._year = a grad_obj = year_graduated() # Before using setter print(grad_obj.get_year()) # After using setter grad_obj.set_year(2019) print(grad_obj._year)
输出
运行上述代码将得到以下结果
0 2019
将属性设为私有
在接下来的示例中,我们将看到如何将方法设为私有,以便外部调用函数无法操作其中的变量。它们只能由类内部的函数操作。通过在它们前面加上两个下划线,可以将它们设为私有。
示例
class year_graduated: def __init__(self, year=32): self._year = year # make the getter method def get_year(self): return self.__year # make the setter method def set_year(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) # Before using setter print(grad_obj.get_year()) # # # After using setter grad_obj.set_year(2019) print(grad_obj._year)
输出
运行上述代码将得到以下结果
32 AttributeError: 'year_graduated' object has no attribute '_year_graduated__year'
从私有方法读取值
现在,我们可以使用property方法,无需使用getter方法即可访问私有属性值。
示例
class year_graduated: def __init__(self, year=32): self._year = year @property def Aboutyear(self): return self.__year @Aboutyear.setter def Aboutyear(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) grad_obj.year = 2018 print(grad_obj.year)
输出
运行上述代码将得到以下结果
32 2018
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP