封装

1.什么是封装:

封:属性对外隐藏,但对内开放

装:申请一个名称空间,往里装入一系列名字/属性

2.为什么要封装:

封装数据属性:不让外部使用者直接使用数据,需要类内部开辟一个接口,让外部通过接口使用数据,好处在于可以在接口中定义各种规则

封装函数属性:定义函数就是为了给类外部使用者的,隐藏函数属性是为了不让外部直接使用,需内部接口,然后接口去调用隐藏的功能

封装的精髓是隔离复杂度

3.如何封装(隐藏):在属性前加上__开头

①这种隐藏只是语法上的变形操作,类中__n其实是_类名__n

②该变形只是在类定义阶段发生一次

③这种隐藏是对外的,对内是开放的

④如果不想让子类的方法覆盖父类的,则可隐藏

特性:property

将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则

封装的三种方法:

class Foo:
def __init__(self,val):
self.__NAME=val #将所有的数据属性都隐藏起来 @property # 查
def name(self):
return self.__NAME #obj.name访问的是self.__NAME(这也是真实值的存放位置) @name.setter # 改
def name(self,value):
if not isinstance(value,str): #在设定值之前进行类型检查
raise TypeError('%s must be str' %value)
self.__NAME=value #通过类型检查后,将值value存放到真实的位置self.__NAME @name.deleter # 删
def name(self):
raise TypeError('Can not delete') f=Foo('egon')
print(f.name)
# f.name=10 #抛出异常'TypeError: 10 must be str'
del f.name #抛出异常'TypeError: Can not delete'

绑定方法

特性绑定给谁,就该谁来用,将第一个参数自动传入

绑定方法分为两类:

①绑定给对象用:

在类内部定义的函数,默认都是绑定给对象使用的

②绑定给类使用:

若类中函数被@classmethod装饰,就是绑定给类的,类调用,自动将类作为第一个参数传入

注:对象也可以使用绑定给类的方法,但是自动传入的还是对象所属的类

绑定方法的精髓:自动传值

非绑定方法:被@staticmethod装饰

既不与类绑定,又不与对象绑定,意味着没有任何自动传值的效果,是一个普通函数

应用:若函数体代码需要用到类,则绑定给类

若函数体代码需要用到对象的值,则绑定给对象

若函数体代码既不需要用到对象的值也不需要用到类,则使用非绑定方法

最新文章

  1. MVC学习系列5--Layout布局页和RenderSection的使用
  2. JAVAWEB学习总结 HttpServletResponse对象(一)
  3. “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置
  4. nginx负载均衡器处理session共享的几种方法(转)
  5. 腾讯企鹅智酷100多张PPT:移动时代创业黄金法则
  6. Unity优化之减少Drawcall
  7. 安卓开发利用外部jar包时ClassNotFound的错误
  8. 代码自动生成工具_java版
  9. magento 操作数据库
  10. Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法
  11. BZOJ 1660: [Usaco2006 Nov]Bad Hair Day 乱发节( 单调栈 )
  12. 让IE6支持position:fixed的方法,CSS expression与JavaScript eval讲解
  13. html5绘图
  14. React实例----一个表单验证比较复杂的页面
  15. 在Android中使用am和input命令在实际使用中的注意事项以及小技巧
  16. html2canvas在微信中无法使用
  17. python 内建函数
  18. Maven Package Plugins And Maven Test
  19. Android 自定义可拖拽View,界面渲染刷新后不会自动回到起始位置
  20. ios -RunTi me(相关知识)

热门文章

  1. Spring注解@Resource和@Autowired区别对比、spring扫描的默认bean的Id、程序获取spring容器对象
  2. 一个文档让vim飞起来
  3. 【bzoj4896】补退选
  4. 如何在本地用vs调试微信接口
  5. C# 笔记——覆盖和重写
  6. [Jsoi2011]柠檬
  7. linux命令(43):cal命令
  8. redis之(九)redis的事务机制
  9. Vue 2.0 生命周期-钩子函数理解
  10. [水煮 ASP.NET Web API2 方法论](12-3)OData 查询