从0基础学习Python (Day13)
面向对象思想
1.面向对象编程介绍
面向对象
概述
目前软件开发技术中两种主流思想:面向过程、面向对象
面向过程思想出现较早,C语言
面向对象思想出现较晚,C++语言,C#,Java,Python …
面向过程
需要实现一个功能的时候,将人类的思维转变成为计算机的思维,然后重点去实现这个功能的每个步骤和过程,每一个步骤都需要亲力亲为
面向对象
需要实现一个功能的时候,并不需要考虑其计算机实现这个功能的细节,不考虑步骤和过程,只需要关心谁去做,做的最终结果即可
例如
生活中案例:吃饭
面向过程:自己动手(丰衣足食)
饿了->买菜->洗菜摘菜->切菜->升火->倒油->炒菜->吃饭->洗锅
面向对象:衣来伸手饭来张口
饿了—>下馆子–>吃饭
编程中案例:三个数求平均值
面向过程:
a接收第一个数—>b接收第二个数—>c接收第三个数—>d运算a+b---->e运算d+c—>f数数---->g----->运算e/f
面向对象:
a接收第一个数—>b接收第二个数---->c接收第三个数—>找math对象使用avg(a,b,c)---->得到结果
2.类和对象
面向对象编程的重要概念:类、对象
类
类是在创建这个对象时,所创建的本质是一个类,将类理解为对象的抽象化概念
例如:猴(类)----孙悟空(对象)
人(类)----六小龄童(对象)
面向对象的语言中,想要创建一个对象,就要先创建这个对象所属的类,“类”就是用来模拟现实事物的
类要模拟现实世界中的事物通常需要通过两个方面来模拟:
- 属性:事物的特征描述信息,例如人:(姓名,姓名,年龄,身高,肤色等)。用于描述事物某个特征
- 行为:事物的能力行动方案,例如人:(吃饭、睡觉、打豆豆等),用于描述事物能干什么
对象
对象是指类的具体表现,对象是类的具体的属性、行为的体现者:
总结
类:抽象的概念,是一张"蓝图"
对象:具体的实现,是一个真正的“作品”
3.类的构成
构成
类(class)由3个部分组成
-
类的名称:类名
-
类的属性:类内部的一组数据变量
-
类的方法:类内部的一些可以操作的函数(行为)
类的属性和方法称之为类的成员
函数:是一个代码片段集合
方法:类里面的函数称之为方法
人类的设计
- 事物的名称(类名):Person
- 属性:身高(height),姓名(name),年龄(age)
- 方法:跑(run),打(fight)
类的抽象问题
如何编程显示生活呢?遇到的每个独立的事务都是一个对象
拥有相同或(类似)属性、行为的所有对象都可以抽象出一个类来描述
如:英雄(鲁班七号)分析:
鲁班—类(属性:身高、颜色。。方法:跑、攻击、技能)
炮弹—类(属性:形状、颜色、攻击力…方法:飞、爆炸…)
手雷—类(属性:…方法…)
飞船—类(属性: …方法…)
4.类的定义
定义一个类格式如下
class 类名:
成员(方法)
# class Person:经典类
# pass
# class Person():
# pass
class Person(object): 新式类
pass
定义一个人类
class Person(object):
def info(self):
print("人在塔在,德玛西亚!")
说明
- 定义类的时候有(两类)三种方式:新式类和两种经典类,上面代码中的最后一个Person为新式类 ,前两种是经典类
- object是Python中所有的类的最顶级父类
- 类的命名规则严格按照大驼峰命名法进行
- 上例中的info是一个实例方法,类里面的方法中的第一个参数一般都是self,self表示当前的实例对象自身,当然这个self换为其他的名称也行,其作用是一个变量,这个变量指向了类的实例的对象的引用
5.创建对象
至此发现一个问题:在面向对象的编程中如果想要创建对象,则必须先要有类,只有类创建好了,才能创建出需要的对象
创建对象格式
对象名1 = 类名()
对象名2 = 类名()
对象名3 = 类名()
luban = Person()
zhangfei = Person()
liubei = Person()
注意
-
如果在同一时刻的三个不同变量,赋予了相同的数据,那么这三个变量的引用是同一个引用,都指向了第一个数据存储的引用
-
同一时刻的三个不同变量,赋予了同一个类的三个实例对象,那么这一个类的三个实例对象引用肯定不相同
一个类实例出来的所有对象肯定不是同一个对象
实例
针对于基于某个类产生的对象,我们讲这个对象称之为类的实例
代码中的类
类是将一组函数或变量进行封装到一个变量中,类名就是这个变量名,类成员就是这个变量的引用中存放的内容
而类的实例就是对象,那么对象名就是一个新的变量名,对象名之后给的类可以理解为在内存中复制了一个类的引用中的内容
6.添加类成员
添加方法
在类的内部直接声明函数,而且函数第一个参数一般自动为self(这个参数具有特殊的含义功能)
添加属性的格式
此处的添加属性指的是给类实例的对象添加一个属性
对象名.属性名=属性值
获取属性的格式
对象名.属性名
注意
通过类创建对象,然后给对象添加属性,而后才能获取对象的已有属性
7._init_()方法
作用
监听对象的实例过程
魔方方法
以两个下划线开头并且以两个下划线结束的方法
魔方方法的特点
- 他们都会有一些特殊的功能
- init方法:监听程序员使用该类进行实例对象的一个标志(当通过一个类实例一个对象的时候,会自动触发这个类中的init方法)
魔方方法的来源
魔方方法一般情况下都是系统提供的方法,Python中的object对象的方法
- 如果想使用魔方方法必须要继承object
- 魔方方法会在特殊的情况下被Python调用
init魔法方法的使用场景
回想之前的类成员添加时,属性无法在类里面创建
可以在init方法中进行添加类的必要属性
注意
自定义类中没有声明__init__魔方方法,但是在新式类中默认使每个自定义类都继承了object类,因此所有的自定义类都具有__init__魔方方法
如果为了能够在完成自己想要的功能,可以自己定义__init__魔方方法
- 如果当需要一个对象在诞生的时候就拥有某个功能,那么可以在init方法中实现
- 如果一个类需要统一的属性的时候,可以在init方法中为每个对象实现这些属性
有参无参
- 无参的init方法用于:这个类实例的所有对象具有相同的属性值
- 有参的init方法用于:这个类实例的每个对象都必须要自己提供的属性值的时候
8._str_()方法
作用
追踪对象的属性值的变化的
默认情况下创建的对象返回的是一些对象的说明及对象所在位置的16进制的一个地址
如果一个类里面实现了str方法,那么创建的对象返回的就是这个方法所返回的字符串
介绍
- str方法不能再添加任何参数
- str方法必须有一个返回值,返回值必须为字符串类型
9._del_()方法
作用
监听对象被销毁的事情
创建对象后Python解释器默认会调用init魔法方法
当每个对象被删除的时候,Python解释器也会默认调用一个方法,就是del方法
调用
当这个对象的地址引用计数为0的时候才会被python给删除的,才会执行这个del方法
因此:如果一个数据或者对象在程序中没有任何引用的时候才会被系统释放
释放对象
语法:
del 对象名
Day13-------END