1. 7 """
  2. 8 封装是面对对象的三大特征之一(另外两个是集成和多态),它指的是将对象> 的信息隐藏在对象的内部,不允许外部程序直接访问对象内部信息,而是通> 过该类锁提供的方法来实现对内部信息的操作和访问
  3. 9 封装是面对对象编程语言对客观世界的模拟。对一个类或者对象进行良好的> 封装可以达到以下目的:
  4. 10 1隐藏类的实现细节
  5. 11 2让使用者稚嫩沟通过实现预定的方法来访问数据,从而可以在该方法中加> 入控制逻辑,限制对属性的不合理访问
  6. 12 3可进行数据检查,从而有利于保证对象信息的完整性
  7. 13 4便于修改,提高代码的可维护性
  8. 14 5将兑现搞得属性和实现细节隐藏起来,不允许外部直接访问
  9. 15 6把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作
  10. 16
  11. 17 """
  12. 18 class user(object):
  13. 19 def __hide(self):
  14. 20 print('示范隐藏的hide方法')
  15. 21 def getname(self):
  16. 22 return self.__name
  17. 23 def setname(self,name):
  18. 24 if len(name) < 3:
  19. 25 raise Exception("不符合标准")
  20. 26 self.__name = name
  21. 27 """
  22. 28 读操作-getname()方法来实现
  23. 29 写操作-setname()方法来实现
  24. 30 """
  25. 31 name = property(getname,setname)
  26. 32 def setage(self,age):
  27. 33 self.__age = age
  28. 34 def getage(self):
  29. 35 return self.__age
  30. 36 """
  31. 37 读操作-getage()方法来实现
  32. 38 写操作-setage()方法来实现
  33. 39 """
  34. 40 age = property(getage,setage)
  35. 41
  36. 42 u = user()
  37. 43 """
  38. 44 u.name = 'ff'
  39. 45 这个程序试图将name属性赋值为ff,这个字符串的长度为2不符合我们所设定
  40. 的赋值标准,则会抛出错误
  41. 46 Traceback (most recent call last):
  42. 47 File "test_class_packkeage.py", line 43, in <module>
  43. 48 u.name = 'ff'
  44. 49 File "test_class_packkeage.py", line 25, in setname
  45. 50 raise Exception("不符合标准")
  46. 51 Exception: 不符合标准
  47. 52 """
  48. 53 u.name = 'fff'#符合设定的标准
  49. 54 """
  50. 55 u.__hide()
  51. 56 __hide()方法是隐藏的,如果支架调用则会报错
  52. 57 Traceback (most recent call last):
  53. 58 File "test_class_packkeage.py", line 54, in <module>
  54. 59 u.__hide()
  55. 60 AttributeError: 'user' object has no attribute '__hide'
  56. 61 python其实没有真正的隐藏机制,双下划线只是python的一个小技巧,pytho n会偷偷的改变以双下划线开头的属性名或者方法名,会在这些属性名和方法
  57. 名前面添加_user__hide()
  58. 62 """
  59. 63 u._user__hide()
  60. 64 #示范隐藏的hide方法
  61. 65 #对隐藏的属性进行赋值
  62. 66 u._user__name = "dd"
  63. 67 #通过这种方式可以绕过我们所设定的检查机制不会抛出错误
  64. 68

总结:python并没有提供真正的隐藏机制,如果程序希望隐藏类中的某些属性或者方法,那么只要在该成员的前面加上__.不过我们要知道的是,即使通过这种机制实现了隐藏,我们也可以绕过这些隐藏来调用这些成员

python-类的隐藏和封装的更多相关文章

  1. 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘

    孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...

  2. python类的继承、封装和多态

    摘自https://www.cnblogs.com/evablogs/p/6724477.html 继承 1 2 3 4 5 6 7 8 class Person(object):     def _ ...

  3. python - class类 (七) 三大特性 - 封装 结尾

    封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ...

  4. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  5. Python中用类实现对象和封装

    """ 用类实现对象和封装 对象:对应客观世界的事物,将描述事物的一组数据和与这组数据有关的操作封装在一起, 形成一个实体,这个实体就是对象 类:具有相同或相似性质的对象 ...

  6. LightMysql:为方便操作MySQL而封装的Python类

    原文链接:http://www.danfengcao.info/python/2015/12/26/lightweight-python-mysql-class.html mysqldb是Python ...

  7. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

  8. Python+Selenium中级篇之-封装一个自己的类-浏览器引擎类

    前一篇文章我们知道了,如何去封装几个简单的Selenium方法到我们自定义的类,这次我们编写一个类,叫浏览器引擎类,通过更改一个字符串的值,利用if语句去判断和控制启动那个浏览器.这里我们暂时,支持三 ...

  9. python中操作excel数据 封装成一个类

    本文用python中openpyxl库,封装成excel数据的读写方法 from openpyxl import load_workbook from openpyxl.worksheet.works ...

  10. python 类知识点总结

    python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...

随机推荐

  1. codeforces 5D

    D. Follow Traffic Rules time limit per test 1 second memory limit per test 64 megabytes input standa ...

  2. 一个C++源文件从文本到可执行文件经历的过程

    一个C++源文件从文本到可执行文件经历的过程 以Hello World为例进行说明 首先我们编写一个cpp源程序 test.cpp #include <iostream> using na ...

  3. Vue dynamic component All In One

    Vue dynamic component All In One Vue 动态组件 vue 2.x https://vuejs.org/v2/guide/components-dynamic-asyn ...

  4. Angular 2 for 2017 web full stack development

    1 1 1 Angular 2 for 2017 web full stack development 1 1 https://angular2.xgqfrms.xyz/ https://ng2-he ...

  5. Learning CSS with Chrome DevTools

    Learning CSS with Chrome DevTools CSS 复合属性展开 border background box-shadow flex-flow flex HTML5 custo ...

  6. webpack & webpack-cli

    webpack & webpack-cli Error: Cannot find module 'webpack' Google site: stackoverfow UnhandledPro ...

  7. vue & npm & components & plugins

    vue & npm & components & plugins how to publish an vue ui component to npm? https://www. ...

  8. uniapp vue mixin使用

    这个mixin的翻版,主要用来分离处理列表数据逻辑 我用了覆写模式 创建mixin ListMoreDataMixin // 由于没有超类的限制这里要判断下 function ____checkGet ...

  9. Techme INC:红光和近红外光疗法有效加速肌肉恢复,美国橄榄球队已采用

    Techme INC创始人兼董事长MADELEINE VAUGHAN表示:在运动结束后,肌肉纤维因为细微损伤造成酸痛情形,即是延迟性肌肉酸痛-DOMS.这类酸痛发生时,需要适度的恢复,避免造成肌肉拉伤 ...

  10. USDN稳定币应用区块链旅游业

    比特币是区块链1.0时代的标志性产品,稳定币则是区块链2.0时代的标志性产品.在稳定币鼻祖USDT爆出"超发"新闻后曾引发市场的动荡,之后新兴稳定币如春笋般涌现.据不完全同济,目前 ...