Python-08-面向对象
Python 面向对象
编程思想
- 编程届的两大阵营
面向过程 | 面向对象 | |
---|---|---|
区别 | 实物比较简单,可以用线性的思想去解决 | 事物比较复杂,使用简单的线性思维无法解决 |
共同点 | 面向过程和面向对象都是解决实际问题的一种思维方式 | |
二者相辅相成,并不是对立的,解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间的复杂的关系。方便我们分析整个系统,具体到微观操作,任然使用面向过程方式来处理 |
类与对象
- 类
- 类别,分门别类,物以类聚,人类,鸟类,动物类,植物类...
- 类是多个类似事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质。
- 数据类型
- 不同的数据类型属于不同的类
- 使用内置函数type()查看数据类型
- 对象
- 100、99、520都是int类之下包含的相似的不同个例,这个个例专业数语称为实例或对象。
类的创建
1 |
|
1 |
|
对象的创建
1 |
|
1 |
|
1 |
|
动态绑定属性和方法
- Python是动态语言,在创建对象之后,可以动态地绑定属性和方法
1 |
|
面向对象的三大特征
封装
- 封装:提高代码的安全性
- 将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂度。
- 在python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前面使用两个"_"。
1 |
|
继承
1 |
|
方法重写
- 方法重写
- 如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重写编写
- 子类重写后的方法中可以通过super().xxx()调用父类中被重写的方法
1 |
|
object类
- object类
- object类是所以类的父类,因此所有类都有object类的属性和方法
- 内置函数dir()可以查看指定对象所有属性
- object有一个_str_()方法,用于返回一个对于'对象的描述',对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们经常会对str()方法进行重写
1 |
|
多态
- 多态
- 简单地说,多态就是"具有多种形态",它指的是:即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。
1 |
|
静态语言和动态语言
- 静态语言和动态语言的三个必要条件
- 继承
- 方法重写
- 父类引用指向子类对象
- 动态语言的多态崇尚"鸭子类型"当看到一只鸟走起来像鸭子、游泳起来像鸭子、收起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,不需要关心对象是什么类型,到底是不是鸭子,只关心对象的行为。
特殊属性和方法
名称 | 描述 | |
---|---|---|
特殊属性 | __dict__ | 获得类对象或实例对象所绑定的所以属性和方法的字典 |
特殊方法 | __len__() | 通过重写__len__()方法,让内置函数len()的参数可以是自定义类型 |
__add__() | 通过重写__add__()方法,可使用自定义对象具有"+"功能 | |
__new__() | 用于创建对象 | |
__int__() | 对创建的对象进行初始化 |
- 特殊属性
1 |
|
- 特殊方法
1 |
|
1 |
|
类的浅拷贝与深拷贝
- 变量的赋值操作
- 只是形成两个变量,实际上还是指向同一个对象
1 |
|
- 浅拷贝
- Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象
1 |
|
- 深拷贝
- 使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同
1 |
|
:kissing_smiling_eyes:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Miraclo!