Python 中的数据隐藏
programmingpythonserver side programming
数据隐藏也称为数据封装,它是向用户隐藏应用程序特定部分的实现的过程。数据隐藏结合了类的成员,从而限制了对类成员的直接访问。
数据隐藏在使应用程序更安全、更强大方面起着重要作用
Python 中的数据隐藏
Python 中的数据隐藏是一种防止类的方法和变量在初始化方法和变量的类之外直接访问的技术。基本成员函数的数据隐藏可防止最终用户查看程序的实现,从而提高安全性。使用数据隐藏还可以通过减少相互依赖性来降低程序的复杂性。
可以通过在成员名称前添加双下划线 (__) 作为前缀,将类成员声明为私有,从而实现 Python 中的数据隐藏。
语法
在 Python 中隐藏数据的语法如下 −
__variablename
示例 1 - 无类名
在此示例中,通过将类中的变量声明为 private −
来执行数据隐藏class hidden: # 声明类的私有成员 __hiddenVar = 0 def sum(self, counter): self.__hiddenVar += counter print (self.__hiddenVar) hiddenobj = hidden() hiddenobj.sum(5) hiddenobj.sum(10) # print 语句抛出错误,因为 __hiddenVar 是私有的 print(hiddenobj.__hiddenVar)
输出
上述代码的输出如下 −
5 15 Traceback (most recent call last): File "main.py", line 12, in <module> print(hiddenobj.__hiddenVar) AttributeError: 'hidden' object has no attribute '__hiddenVar'
示例 2 - 带类名
在下面的示例中,隐藏的数据可以直接在类外部访问 -
class hidden: # 使用 __ 将 hiddenVar 声明为私有 __hiddenVar = 0 def sum(self, counter): self.__hiddenVar += counter print (self.__hiddenVar) hiddenobj = hidden() hiddenobj.sum(5) hiddenobj.sum(10) # 在变量前添加类名,用于在类外访问变量 print(hiddenobj._hidden__hiddenVar)
输出
上述代码的输出如下 −
5 15 15
示例 3
让我们看看另一个使用类的私有和受保护成员进行数据隐藏的示例
class Employee: # Hidden members of the class __password = 'private12345' # Private member _id = '12345' # Protected member def Details(self): print("ID: ",(self._id)) print("Password: ",(self.__password)+"\n") hidden = Employee() hidden.Details() print(hidden._Employee__password)
输出
上述代码的输出为 −
ID: 12345 Password: private12345 private12345
在上述输出中,Details 函数是 Employee 类的一部分,因此它可以访问该类的私有成员和受保护成员。这就是为什么无需使用类名就可以访问 id 和密码的原因。然而,在最后的打印语句中,需要类名来访问密码,因为私有成员的范围仅限于 Employee 类。
数据隐藏的优势
- 通过封装重要数据来增强安全性。
- 通过断开类内的对象与无用数据的连接来隐藏不相关的信息,不让最终用户看到
- 防止创建指向错误数据的链接。