Python高级编程(13):数据封装和私有属性
在java或者c++里面,我们都有private,protected等来修饰类,从而达到数据封装和私有属性的目的,但是在Python里面,这些都是没有的,那么它是如何达到相同目的的呢?我们继续看段代码:
1 | from .class_method import Date |
现在我们不希望直接获取到自己的出生信息,需要对其进行隐藏,我们可以使用__birthday
(前面有2个下划线)就能实现这个功能:
1 | class User: |
但是我们却依然可以通过它提供的get_age方法进行获取信息:
1 | def get_age(self): |
也就是说只能通过类提供的公共方法来进行访问,而不能通过对象的属性这种方式来进行访问了。实际上Python只是对这个__birthday
进行了变形,变成了_Classname__attr
这种方式,也就是_User__birthday
,我们尝试着打印输出一下:
1 | print(user._User__birthday) |
也就是说从语言层面上来说并没有完全解决我们这个属性的私有化,只是加了一些小的技巧,将变量进行了变形,所以并不存在的完全的安全性,java也是一样的,只是安全性的破解方法简单容易而已。Python里面的这种技巧也可以很好的解决多继承问题中变量的名字冲突的问题。
[ - ]参考文章:
Python笔记8——数据封装和访问限制
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 余思博客!
评论