Python说明书 (7) 对象篇

面向过程/对象

举个栗子

面向过程:按照逻辑业务,从上到下写代码

比如说现在开学了学生们要进行自我介绍,写一个程序去介绍,根据学生的信息然后最后定义一个过程来完成这个自我介绍的任务;再比如说,杀龙,那首先我们要找杀龙的武器,谁去杀龙,杀龙的过程要怎么杀,最后完成杀龙的任务。这是都是面向过程,面向过程的时候你整个过程都得设计清楚,不能有一个过程有出错,不然程序就无法运行下去。


Python说明书 (7) 对象篇_第1张图片

面向对象:将数据和函数绑在一起,进行封装,更快的开发程序,减少了重复代码的重复书写过程。

面向对象就是,现在要自我介绍,你叫同学自己站起来自我介绍就行,你也不用给他规定模板怎么介绍,他自己介绍就可以。杀龙也不用自己想着怎么杀,你要想的就是谁能杀龙让他去杀,完成这个杀龙的任务就行。也就是面向哪个对象。

面向对象和面向过程仅仅是一种解决问题的思路,没有绝对的概念去区分这个代码是面向对象还是过程

对象→类→属性/方法

日常生活中我们把相近的东西分为一类(class),比如鸟类,那一只乌鸦/一只麻雀/一只鸵鸟等等的就是里面的个体计算机里称为对象一个类别下有很多对象。鸟类有羽毛,繁衍方式是下蛋,这是鸟类的属性。除了用属性来分类,我们也可以用方法来分类鸟会飞,会移动,这是鸟的行为,计算机里称为方法(method)。方法在类的内部定义函数。


Python说明书 (7) 对象篇_第2张图片
类与对象的关系

类(Class)由3部分构成

类的名称:类名

类的属性:特征

类的方法:类能进行的操作行为

1.定义一个类的方法是

class 类名:

类名的第一个字母通常大小写

2.定义类的方法

def 属性名(self,属性值)

记得一定要先self!!!

self参数是为了在方法内部引用对象自身,方法的第一个参数必须位self

Python说明书 (7) 对象篇_第3张图片

3.创建一个对象的方法是

类名()

4.给对象添加属性的方法是

对象.属性名() = 值

5.引用对象属性的两种方法

(1)对象.属性

(2)定义一个方法,这个方法中使用self.属性

Python说明书 (7) 对象篇_第4张图片


栗子

Python说明书 (7) 对象篇_第5张图片
Python说明书 (7) 对象篇_第6张图片


Python说明书 (7) 对象篇_第7张图片

python提供了初始化对象的方法,一系列特殊方法称为魔法方法(magic method),方法名为前后两个下划线,比如__init__()/__add__()/__dict__()

__init__的方法:在每次创建对象时自动调用


Python说明书 (7) 对象篇_第8张图片
输出ok

self参数还能在一个方法内部调用同一类的其它方法


Python说明书 (7) 对象篇_第9张图片

类别本身还可以细分成子类,我们通过继承表达上述概念


Python说明书 (7) 对象篇_第10张图片

子类可以继承父类的属性,在子类添加父类不存在的属性,从而增强子类的功能。子类还可以进行属性覆盖,在子类替换父类已经存在的属性。

False

苹果会调用水果的属性而不是食物的属性

但有时子类是父类的拓展,这时就可以用super关键字在子类中调用父类中覆盖的方法


Python说明书 (7) 对象篇_第11张图片

运算符

__add__():将两个对象进行加法运算

__sub__():减法操作

__getitem__():调用[]方法

__setitem__():替换元素

__delitem__():删除元素

__len__():元素总数

__abs__():绝对值

__int__():取整数

__mul__():乘法

__dict__():键为属性名

propetry()特性

内置函数propetry()特性是特殊的属性,propetry()最多可以加载四个参数。前三个参数为函数,分别用于设置获取/修改/删除属性,最后一个参数为特性的文档,可以为一个字符串起说明作用。

__getattr__()方法

__getattr__(self,name) 来查询即生成的属性,只能用来查询不在__dict__中的属性。__getattribute__()可以用来查询任意属性

__setattr__(self,name,value) 修改属性

__delattr__(self,name) 删除属性

__descriptor__ 

动态类型

1.对象名是对对象的引用,变量名可以随时更改指向,变量类型也可以在程序中改变,python是动态语言

(1)内置函数id(),能够查询到引用指向的是哪个对象,返回对象的编号

Python说明书 (7) 对象篇_第12张图片
赋值后,返回的编号相同

(2)用is运算判断两个引用是否指向同一个对象


Python说明书 (7) 对象篇_第13张图片

2.可变对象和不可变对象

(1)不可变对象

整数/浮点数/字符串,不能改变对象本身,赋值最多只能改变对象的指向

Python说明书 (7) 对象篇_第14张图片
b指向5没有改变

(2)可变对象

字典/列表自身对象可以发生改变

Python说明书 (7) 对象篇_第15张图片
list2指向的[0,1,2]发生了改变

3.从动态类型看参数传递

Python说明书 (7) 对象篇_第16张图片
a与x相互独立

Python说明书 (7) 对象篇_第17张图片
a改变

引用计数

getrecount()创建临时引用,所得结果会比期望多1

你可能感兴趣的:(Python说明书 (7) 对象篇)