一、面向对象编程
Define : 把对象作为程序的基本单元,对象既有数据又有操作数据的函数。
面向过程的程序设计:把程序看作一系列命令的集合,一组函数的顺序执行。
面向对象的程序设计: 把计算机程序看作一组对象的集合,每个对象都可以接收其他对象发过来的消息,并进行处理。
考虑的不是程序的执行流程, 而是处理的对象 student,这个对象包含什么(属性),对这个对象的操作(print)
二、类(Class)和实例(Instance)
1.类的定义
Student 是类名— 通常大写开头
object 是表示继承的类,如果没有,一般使用 object
在 python 3 中,括号没不加 object,也会默认 继承 object 类
liu 就是差 创建的一个实例 存放在 0x这个地址里面
Student 是一个 类 claas
3.绑定属性
可以在实例中绑定属性
由于类的作用就是一个模版,对于一些共有的属性可以写入类之中。 例如定义一个鸟的类,共性就是会飞,这个属性就可以写进,而这个 通过 init 实现
第一个参数永远是 self
self 之后加入其他的参数,在定义类的时候需要传入,self 不需要传入
3. 数据封装
由于 Student 实例 本身就包含了 name 和 score 等数据,我们访问这些数据,可以直接在类的内部定义访问数据的函数
只需要调用,不需要知道内部的实现细节,数据和逻辑就被封装起来了
4. 访问限制
1. 限制访问
2. 外部获取属性— get
3. 外部修改属性 — set
4. 特殊情况
1,单下划线开头的变量名_name :
这样的变量外部可以访问,但是预定俗成,视为私有变量
2,双下划线的变量 也可以外部访问,只不过不能直接访问
Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量
5.静态语言 vs 动态语言
对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。
对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了
6. 类属性
给实例绑定属性的方法是通过 self 变量