面向对象基础
面向对象编程
面向过程编程(一种编程思想):类似于工厂的流水线,一步一步的完成每个工作.
- 优点:逻辑简单明了
- 缺点:可扩展性差,牵一发而动全身
面向对象编程也是一种思想,就好比是在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式.
其中对象的概念: 就是特征和技能的结合体
面向对象编程: 定义出一个个鲜明独特的对象,然后通过对象之间的交互编程来解决问题.
- 优点:可扩展性强
- 缺点:编程的复杂程度要高于面向
名称空间
能产生名称空间的有:文件 | 函数 | 类
能产生名称空间的对象有__dict__这个值,通过该这个值访问到名字与地址的对应关系
def func():
pass
func.__dict__['index'] = 10000
print(func.__dict__)
属性:
print(func.__dict__['index'])
print(func.index)
方法:
func.add = lambda n1, n2: n1 + n2
print(func.__dict__)
print(func.add(10, 20))
类与对象
类(类别):一系列具有相同特征和技能的对象
现实世界中先有对象,后有类.
python中先定义好类,才有实例化对象.
函数定义阶段,只检测语法,不执行代码(牢记)
类的定义阶段,会运行代码(牢记)
类拥有自己的名称空间,类的实例化对象也拥有自己的名称空间
对象定制独有的特征
通过实例化对象自己的名称空间可以给实例化对象定制独有的特征:
- 我们在类内部定义一个
__init__
方法,这个方法会在实例化对象时自动触发,会产生实例化对象的名称空间,并且可以给实例化对象初始化其特有的属性,__init__
中第一个参数self就是实例化对象. - 属性的访问顺序:实例化对象优先加载自身的属性与方法,如果没有再考虑类的,类中也没有则报错
类与对象的绑定方法
- 类中定义的函数是类的函数属性,类可以使用,相当于一个普通的函数而已,意味着需要完全遵循函数的参数规则,该传几个值就传几个
- 类中定义的函数是共享给所有对象的,对象也可以使用,而且是绑定给对象用的,绑定的效果:绑定给谁,就应该由谁来调用,谁来调用就会将谁当作第一个参数自动传入
- 类中定义的函数都应该自带一个参数self
- 类名称空间中定义的数据属性和函数属性都是共享给所有对象用的
- 对象名称空间中定义的只有数据属性,而且是对象所独有的数据属性
类与数据类型
lis = list([1,2,3])
lis2 = list([1,2,3])
lis.append(4) # self自动传lis
list.append(lis,4) # 手动传lis
对象的高度整合
在类里面封装了一大堆特征/数据,然后又封装了一大堆方法(方法用来专门用来操控这些数据的),并且在这基础上对于不同对象,这些属性和方法会有不一样.
总结为:对象其实就是一个高度整合的产物,整合数据与专门操作该数据的方法.